C++面向对象程序设计 - 标准输出流
在C++中,标准输出流通常指的是与标准输出设备(通常是终端或控制台)相关联的流对象。这个流对象在C++标准库中被定义为std::cout、std::err、std::clog,它们是std::ostream类的一个实例。
一、cout,cerr和clog流
ostream类定义了3个输出流对象,即cout,cerr,clog。
1.1cout流对象
(1) cout是console output的缩写,意为控制台(终端显示器)的输出。它不是C++预定义的关键字,而是ostream流类的对象,在iostream中定义。顾名思义,流是流动的数据,cout流是流向输出(显示设备)的数据,cout流中的数据是用流插入运算符“<<“顺序加入的。
示例如下:
cout <<"Hello World!" <<"I am learning C++.";cout流是容纳数据的载体,而并不是运算符。cout将它们输送到输出设备上显示,在显示设备上输出”Hello Wordl! I am learning C++.“。
(2) 在使用"cout <<"输出基本类型的数据时,不必考虑数据是什么类型,系统会自动判断数据的类型,并根据类型选择调用与之匹配的运算符重载函数。示例如下:
cout <<10.0f <<100.58 <<'=' <<"operator"; (3) cout流在内存中对应开辟了一个缓冲区,用来存储流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中所有数据,然后插入一个换行符,并刷新流(清空缓冲区)。示例如下:
cout <<"Hello World" <<endl;
cout <<"I am learning C++" <<endl;注意的是如果插入换行符”\n“,则只是换行而已,并不是刷新cout流,与endl刷新流是清空缓冲区不是一回事。
(4) 在iostream中只对”<<“和">>"运算符用于标准类型数据的输入输出进行了重载,但未对用户声明的类型数据的输入输出进行重载。所以用户可以声明新的类型,并用”<<“和">>"运算符对其进行输入输出另作重载。
1.2 cerr流对象
cerr流对象是标准出错流,cerr流已被指定为与显示器关联,cerr作用是向标准出错设备(standard error device)输出有关的出错信息。cerr是console error的缩写,意为在控制台(显示器)显示出错的信息。
注意的是cerr和cout的作用和用法虽然差不多,但是有一点不同的是,cout流通常是传送到显示设备输出,也可以被重定向输出到磁盘文件,而cerr流中的信息只能显示输出。
        通过解一元二次方程,其一般解为
,但若a=0,或
时,用公式出错。编写程序,从键盘输入a、b、c的值,求
和
。如果a=0或
,输出错误信息。代码示例如下:
#include <iostream>
#include <cmath>
using namespace std;int main(){float a, b, c, disc;cout <<"Please enter the values of a, b, c:";cin >>a >>b >>c;// 如果a等于0输出错误信息if(a == 0){cerr <<"a is equal to zero, error!" <<endl;} else{// 如果b * b - 4 * a * c)结果小于0 ,输出错误信息if( (disc = b * b - 4 * a * c) < 0 ){cerr <<"Erro: dist=b*b-4*a*c<0" <<endl;} // 满足条件,则正常输出结果else{cout <<"x1 = " <<(-b + sqrt(disc) / (2*a)) <<endl;cout <<"x2 = " <<(-b - sqrt(disc) / (2*a)) <<endl;}}return 0;
}1)如输入a=0,运行后结果如下图:

2)如输入,运行后结果如下图:

3)如满足条件,运行后结果如下图:

1.3 clog流对象
clog流对象也是标准出错流,它是console log的缩写,作用与cerr相同,都是在终端显示器上显示出错信息。它们之间只是有微小区别。cerr是不经过缓冲区,直接向显示器上输出有关信息,而clog中的信息存放在缓冲区中,缓冲区满后或遇endl时向显示器输出。
示例如下:
#include <iostream>
using namespace std;int main(){clog <<"This is a message to the C library's error stream." <<endl;clog.flush();		//确保消息被立即刷新到设备return 0;
}运行结果如上图:

实际编程中,cerr通常用于输出需要立即显示的错误消息或调试信息,而clog用于记录那些稍后再处理的更详细的日志信息。这只是常见的约定,并不是强制的。
二、格式输出
在输出数据时,为简便起见,往往不指定输出的格式,由系统根据数据的类型采取默认的格式,但有时希望数据按指定的格式输出,如要求以十六进制或八进制形式输出一个整数,对输出的小数只保留两位小数等。
2.1 使用控制符控制输出格式
以下为输出数据的控制符,如下表:
| 控制符 | 作用 | 
|---|---|
| dec | 设置整数的基数为10 | 
| hex | 设置整数的基数为16 | 
| oct | 设置整数的基数为8 | 
| setbae(n) | 设置整数的基数为n(n只能是8,10,16三者之一) | 
| setfill(c) | 设置填充字符c,c可以是字符常量或字符变量 | 
| setprecision(n) | 设置实数的精度为n位,在以一般十进制小数形式输出时n代表有效数字。在以fixed(固定小数位数)形式和scientific(指数)形式输出时n为小数位数。 | 
| setw(n) | 设置字段宽度为n位 | 
| setiosflags(ios::fixed) | 设置浮点数以固定的小数位数显示 | 
| setiosflags(ios::scientific) | 设置浮点数以科技记数法(即指数形式)显示 | 
| setiosflags(ios::left) | 输出数据左对齐 | 
| setiosflags(ios::right) | 输出数据右对齐 | 
| setiosflags(ios::skipws) | 忽略前导的空格 | 
| setiosflags(ios::uppercase) | 在以科学记数法输出E和以十六进制输出字母X时以大写表示 | 
| setiosflags(ios::showpos) | 输出正数时给出”+“号 | 
| resetioflags() | 终止已设置的输出格式状态,在括号中应指定内容 | 
注意的是,这些控制符是在头文件iomanip中定义的,因而程序中应当包含头文件ipmanip。以下通过案例了解以上的方法,代码如下:
#include <iostream>
#include <iomanip>
using namespace std;int main(){int a = 20;			//定义整数a值为20// 输出信息cout <<"Dec:" <<dec <<a <<endl;			//以十进制形式输出整数cout <<"Hex:" <<hex <<a <<endl;			//以十六进制形式输出整数acout <<"Oct:" <<oct <<a <<endl;			//以八进制形式输出整数acout <<endl;// 通过setbase输出cout <<"Use setbase to set the base:" <<endl;cout <<"Dec:" <<setbase(10) <<a <<endl;			//以十进制形式输出整数cout <<"Hex:" <<setbase(16) <<a <<endl;			//以十六进制形式输出整数acout <<"Oct:" <<setbase(18) <<a <<endl;			//以八进制形式输出整数acout <<endl;// 设置精度,宽度以及填充字符double PI = 3.1415926;cout <<"set precision 2: " <<setprecision(2) <<PI <<endl;		//改为2位小数cout <<setw(10) <<setprecision(2) <<PI <<endl;					//设置宽度为10cout <<setfill('*') <<setw(10) <<setprecision(2) <<PI <<endl;	//设置填充字符cout <<endl;// setiosfloagscout <<setiosflags(ios::scientific) <<setprecision(8);				// 按指数形式输出8位小数cout <<"PI = " <<PI <<endl;											// 指数形式输出PI值cout <<"precision 4 PI = " <<setprecision(4) <<PI <<endl;			// 指数形式 输出PI为4位小数cout <<"Left aligned, PI = " <<left <<setw(20) <<PI <<endl;			// 左侧齐cout <<"Right aligned, PI = " <<right <<setw(20) <<PI <<endl;		// 右对齐 // 使用大写字母cout <<"Uppercase: " <<uppercase <<hex <<255 <<endl;				//以16进制显示并使用大写字母cout <<"Show positive sign:" <<showpos <<PI <<endl;// 注意此时cout <<"Fixed, PI = " <<setiosflags(ios::fixed) <<PI <<endl;		// 改为小数形式输出return 0;
}运行结果如下图:

最后代码试图将科学记数法设置为小数位,但是(cout <<"Fixed, PI = " <<setiosflags(ios::fixed) <<PI <<endl;)输出结果为+0XC.90FDA6896C25P-2,它可能是由于被setiosflags错误的解析导致的,通过resetiosflags重置清理掉前面的科学记数法格式即可。在上述代码后面追加以下代码即可:
// 重置指数形式
cout <<"reset ios flags:" <<endl;
cout <<resetiosflags(ios::scientific | ios::showpos);
cout <<"PI = " <<PI <<endl;resetiosflags中ios::scientific是清除科学记数法,ios::showpos是清除数值前面”+“号,输出结果如下图:

2.2 用流对象的成员函数控制输出格式
除了可以用控制符来控制输出格式,还可以通过调用流对象cout中用于控制输出格式的成员函数来控制输出格式。用于控制输出格式的常用的成员函数如下表:
| 流成员函数 | 与之作用相同的控制符 | 作用 | 
|---|---|---|
| precision(n) | setprecision(n) | 设置实数的精度为n位 | 
| width(n) | setw(n) | 设置字段宽度为n位 | 
| fill(c) | setfill(c) | 设置填充字符c | 
| setf() | setiosflags() | 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中的内容相同。 | 
| unsetf() | resetiosflag() | 终止已设置的输出格式状态,在括号中应该指定内容 | 
格式标志在类ios中被定义为枚举值,因此在引用这些格式标志时要在前面加上类名ios和域运算符"::"。格式标志如下表:
| 格式标志 | 作用 | 
|---|---|
| ios::left | 输出数据在本域范围内向左对齐 | 
| ios::right | 输出数据在本域范围内向右对齐 | 
| ios::internal | 数值的符号位在域宽度内左对齐,数值右对齐,中间由填充字符填充 | 
| ios::dec | 设置整数的基数为10 | 
| ios::oct | 设置整数的基数为8 | 
| ios::hex | 设置整数的基数为16 | 
| ios::showbase | 强制输出整数的基数(八进制数以0打头,十六进制数以0x打头) | 
| ios::showpoint | 强制输出浮点数的小点和尾数0 | 
| ios::uppercase | 在以科学记数法格式E和以十六进制输出字母时以大写表示 | 
| ios::showpos | 对正数显示”+“号 | 
| ios::scientific | 浮点数以科学记数法格式输出 | 
| ios::fixed | 浮点数以定点格式(小数形式)输出 | 
| ios::unitbuf | 每次输出之后刷新所有的流 | 
| ios::stdio | 每次输出之后清除stdout, stderr | 
下面使用流控制成员输出之前案例数据,代码如下:
#include <iostream>
#include <iomanip>
using namespace std;int main(){int a = 20;			//定义整数a值为20// 输出信息cout.setf(ios::dec);				//设置以十进制形式输出整数cout <<"Dec:" <<a <<endl;cout.unsetf(ios::dec);			cout.setf(ios::hex);				//设置以十六进制形式输出整数acout <<"Hex:" <<a <<endl;			cout.unsetf(ios::hex);cout.setf(ios::oct);				//设置以八进制形式输出整数acout <<"Oct:" <<a <<endl;			cout.unsetf(ios::oct);cout <<endl;// 设置精度,宽度以及填充字符double PI = 3.1415926;cout <<"set precision 2, PI = " <<PI <<endl;			//显示PI值cout.width(30);											//设置宽度为30cout <<"set width, PI =" <<PI <<endl;	cout.width(30);											//设置宽度为30cout.fill('*');											// 置填充字符*cout <<"set fill, PI =" <<PI <<endl;cout <<endl;cout <<"set internal:" <<endl;cout.width(30);											//设置宽度为30cout.fill(' ');											// 置填充字符*cout.setf(ios::internal | ios::showpos);cout <<PI <<endl;cout.unsetf(ios::internal | ios::showpos);cout <<endl;// 标记为科学记数法cout.setf(ios::scientific);								// 设置为科学记数法cout <<"set scientific, PI = " <<PI <<endl;cout.precision(4);										//保留4位小数cout <<"precision 4, PI = " <<PI <<endl;cout <<endl;// 指定用定点形式输出cout.setf(ios::fixed);cout <<"Fixed, PI = " <<PI <<endl;cout.unsetf(ios::fixed);return 0;
}运行后结果如下图:

这里同样,在最后输出时PI未得到想要结果,这是因为在设置科学记数法格式cout.setf(ios::scientific)未及时清除设置的格式标志导致的,所以添加cout.unsetf(ios::scientific)及时清除以避免影响后续输出。
完整代码如下:
#include <iostream>
#include <iomanip>
using namespace std;int main(){int a = 20;			//定义整数a值为20// 输出信息cout.setf(ios::dec);				//设置以十进制形式输出整数cout <<"Dec:" <<a <<endl;cout.unsetf(ios::dec);			cout.setf(ios::hex);				//设置以十六进制形式输出整数acout <<"Hex:" <<a <<endl;			cout.unsetf(ios::hex);cout.setf(ios::oct);				//设置以八进制形式输出整数acout <<"Oct:" <<a <<endl;			cout.unsetf(ios::oct);cout <<endl;// 设置精度,宽度以及填充字符double PI = 3.1415926;cout <<"set precision 2, PI = " <<PI <<endl;			//显示PI值cout.width(30);											//设置宽度为30cout <<"set width, PI =" <<PI <<endl;	cout.width(30);											//设置宽度为30cout.fill('*');											// 置填充字符*cout <<"set fill, PI =" <<PI <<endl;cout <<endl;cout <<"set internal:" <<endl;cout.width(30);											//设置宽度为30cout.fill(' ');											// 置填充字符*cout.setf(ios::internal | ios::showpos);cout <<PI <<endl;cout.unsetf(ios::internal | ios::showpos);cout <<endl;// 标记为科学记数法cout.setf(ios::scientific);								// 设置为科学记数法cout <<"set scientific, PI = " <<PI <<endl;cout.precision(4);										//保留4位小数cout <<"precision 4, PI = " <<PI <<endl;cout.unsetf(ios::scientific);cout <<endl;// 指定用定点形式输出cout.setf(ios::fixed);cout <<"Fixed, PI = " <<PI <<endl;cout.unsetf(ios::fixed);return 0;
}输出结果如下图:

三、用流成员函数put输出字符
在程序中一般用cout和插入运算符”<<“实现输出,cout流在内存中有相应的缓冲区。有时有些特殊输出要求,ostream类还提供了专用于输出单个字符的成员函数put。
3.1 ASCII码输出
如下示例代码:
#include <iostream>
using namespace std;int main(){// ASCII字符码输出int arr[] = {71, 79, 79, 68};		// 字母GOOD分别对应ASCII码71,79,68// 循环输出单个字符for(int i = 0; i<4; i++) cout.put(arr[i]);cout.put('\n');return 0;
}运行结果如下图:

3.2 字符串反转
也可使用cout.put()对字符串进行反转输出,示例代码如下:
#include <iostream>
#include <string>
using namespace std;int main(){string message = "Hello World!";		//定义字符串信息const char *str = message.c_str();		//将字符串转换为char字符数组// 循环输出字符信息,倒序输出for(int i = message.length() - 1; i >= 0; i--) cout.put(*(str + i));// 换行cout.put('\n');return 0;
}运行后结果如下图:

字符指针变量str指向第1个字符'H', a+1则是第2个字符'e'的地址,*(a+1)的值就是’e'。指针的相关知识前面已讲解过,想了解朋友可以翻看下,地址:C++面向对象程序设计 - 对象指针和this指针_面向对象版本的指针-CSDN博客
3.3 putchar函数
除了可以用cout.put函数输出一个字符外,还可以用putchar函数输出一个字符。putchar函数是C语言中使用的,在stdio.h头文件中定义的。所以3.2中示例可以修改为putchar函数,代码如下:
#include <iostream>
#include <string>
using namespace std;int main(){string message = "Hello World!";		//定义字符串信息const char *str = message.c_str();		//将字符串转换为char字符数组// 循环输出字符信息,倒序输出for(int i = message.length() - 1; i >= 0; i--) putchar(*(str + i));// 换行cout.put('\n');return 0;
}运行后输出结果与3.2相同。
相关文章:
 
C++面向对象程序设计 - 标准输出流
在C中,标准输出流通常指的是与标准输出设备(通常是终端或控制台)相关联的流对象。这个流对象在C标准库中被定义为std::cout、std::err、std::clog,它们是std::ostream类的一个实例。 一、cout,cerr和clog流 ostream类…...
警惕Mallox勒索病毒的最新变种hmallox,您需要知道的预防和恢复方法。
引言 : 在数字化时代,数据已成为企业和个人最宝贵的资产之一。然而,随着技术的不断发展,网络威胁也日益猖獗,其中.hmallox勒索病毒以其独特的加密手段和狡猾的传播方式,成为了网络安全领域的一颗“隐形炸弹…...
2024年华为OD机试真题-火星文计算-C++-OD统一考试(C卷D卷)
题目描述: 已知火星人使用的运算符为#、$,其与地球人的等价公式如下: x#y = 4*x+3*y+2 x$y = 2*x+y+3 1、其中x、y是无符号整数 2、地球人公式按C语言规则计算 3、火星人公式中,#的优先级高于$,相同的运算符,按从左到右的顺序计算 现有一段火星人的字符串报文,请…...
 
3.00001 postgres如何初始化系统参数?
文章目录 加载参数整体流程参数结构举例:ConfigureNamesBool 初始化参数 InitializeGUCOptionsbuild_guc_variablesInitializeOneGUCOptionInitializeGUCOptionsFromEnvironment 命令行添加SelectConfigFiles配置 加载参数整体流程 我们先看下guc参数是如何管理的。…...
 
C# 读取 CSV 文件的方法汇总
文章目录 1. 使用System.IO命名空间中的类2. 处理标题行和指定列3. 使用CsvHelper库4. 高级功能和异常处理5. 使用 LINQ6. 总结 CSV(Comma-Separated Values,逗号分隔值)文件是一种简单的文本文件格式,用于存储表格数据。在C#中&a…...
element+ 引入图标报错 Failed to resolve import “@element-plus/icons-vue“ from “
element 引入图标报错 Internal server error: Failed to resolve import “element-plus/icons-vue” from “src\components\TimeLine.vue”. Does the file exist? 原因:element-plus需要单独引入 icons 文档 pnpm install element-plus/icons-vue之后就可以…...
Github 2024-05-25 开源项目日报 Top10
根据Github Trendings的统计,今日(2024-05-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3TypeScript项目3非开发语言项目1HTML项目1Rust项目1Go项目1Jupyter Notebook项目1Java项目1Angular文档:交付Web应用程序的自信之选…...
 
VPN的详细理解
VPN(Virtual Private Network,虚拟私人网络)是一种在公共网络上建立加密通道的技术,通过这种技术可以使远程用户访问公司内部网络资源时,实现安全的连接和数据传输。以下是对VPN的详细介绍: 选择代理浏览器…...
java后端轮播图的设计
对于表示轮播图位置这种有限且较小范围的数据,一般可以使用整数类型来表示。考虑到位置序号一般是非负整数且数量较少,可以选择使用小范围的整数类型,如下: 整数类型: 对于Java中,可以考虑使用 int 类型来表示位置序号…...
 
upload-labs 21关解析
目录 一、代码审计 二、实践 三、总结 一、代码审计 $is_upload false; $msg null; if(!empty($_FILES[upload_file])){//检查MIME$allow_type array(image/jpeg,image/png,image/gif);if(!in_array($_FILES[upload_file][type],$allow_type)){$msg "禁止上传该类型…...
常用汇编指令
(arg)argument:自变量,变元 (reg)register:寄存器 (seg)segment:段寄存器 (mem)memory:存储器(内存单元&am…...
 
LabVIEW软件需求分析文档内容和编写指南
编写LabVIEW软件需求分析文档(Software Requirements Specification, SRS)是软件开发的关键步骤之一。以下是详细的内容结构、编写指南和注意事项: 内容结构 引言 项目背景:简要介绍项目背景和目的。 文档目的:说明需…...
 
spring cache(三)demo
目录 一、入门demo 1、pom 2、配置文件 3、config 4、controller 5、service 6、dao 7、dto与常量 8、测试: 8.1、无参 8.2、单参 (1)缓存与删除缓存 (2)删除缓存加入异常 二、自定义删除key 1、pom 2、…...
Android 应用开发语言选择对比
Android开发语言有多种,但是每种语言的各有不同的适用场景,对比介绍如下: 一.首选:原生应用Java,Kotlin 1.截至目前,大约有70%的Android开发者仍然使用Java语言进行开发,而30%的开发者则选择…...
 
Git 小白入门到进阶—(基本概念和常用命令)
一.了解 Git 基本概念和常用命令的作用 (理论) 基本概念 1、工作区 包含.git文件夹的目录,主要用存放开发的代码2、仓库 分为本地仓库和远程仓库,本地仓库是自己电脑上的git仓库(.git文件夹);远程仓库是在远程服务器上的git仓库git文件夹无需我们进行操…...
 
大数据框架总结(全)
☔️ 大数据框架总结(全) 关注“大数据领航员”,在公众号号中回复关键字【大数据面试资料】,即可可获取2024最新大数据面试资料的pdf文件 一. Hadoop HDFS读流程和写流程 HDFS写数据流程 (1)客户端通过…...
 
44、Flink 的 Interval Join 详解
Interval Join Interval join 组合元素的条件为:两个流(暂时称为 A 和 B)中 key 相同且 B 中元素的 timestamp 处于 A 中元素 timestamp 的一定范围内,即 b.timestamp ∈ [a.timestamp lowerBound; a.timestamp upperBound] 或…...
 
H6246 60V降压3.3V稳压芯片 60V降压5V稳压芯片IC 60V降压12V稳压芯片
H6246降压稳压芯片是一款电源管理芯片,为高压输入、低压输出的应用设计。以下是对该产品的详细分析: 一、产品优势 宽电压输入范围:H6246支持8V至48V的宽电压输入范围,使其能够适应多种不同的电源环境,增强了产品的通用…...
【MySQL精通之路】查询优化器的使用(8)
MySQL通过影响查询计划评估方式的系统变量、可切换优化、优化器和索引提示以及优化器成本模型提供优化器控制。 服务器在column_statistics数据字典表中维护有关列值的直方图统计信息(请参阅第10.9.6节“Optimizer统计信息”)。与其他数据字典表一样&am…...
Docker in Docker(DinD)原理与实践
随着云计算和容器化技术的快速发展,Docker作为开源的应用容器引擎,已经成为企业部署和管理应用程序的首选工具。然而,在某些场景下,我们可能需要在Docker容器内部再运行一个Docker环境,即Docker in Docker(…...
 
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
 
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
 
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
 
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
 
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
 
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
