1.1 输入与输出

1.1.1 iostream

<iostream>库是一个十分常见的库,输入输出时我们都会包含它,事实上,这个库包含了<ios><streambuf><istream><ostream>

全局流对象 简介
cin 标准输入流
cout 标准输出流
cerr 非缓冲标准错误流
clog 缓冲标准错误流

coutcerrclog与流插入运算符<<结合使用,而cin与流提取运算符>>结合使用。

cerr是非缓冲的,每个流插入到cerr时都会立即输出,因此可以被用来进行错误信息输出。

coutclog是缓冲的,插入会存储在缓冲区,直到缓冲填满或者缓冲区刷新时才会输出。

1.1.2 输入

成员函数 简介
get 从输入流中读取一个或多个字符
getline 从输入流中读取一行
ignore 导致从当前读取位置跳过大量元素
peek 返回要读取的下一字符
seekg 重置在输入流中的位置
read 从流中读取指定数目的字符,并将其存储到数组中
gcount 返回在最后一个未格式化输入期间读取的字符数

get函数

istream& get ();
istream& get (char ch);
istream& get (char* s, streamsize n);
istream& get (char* s, streamsize n, char delim);

第一和第二种重载使用时没有任何区别,即cin.get(ch)ch=cin.get()的区别,均为读取一个字符,也可以读取空格和回车,因此使用时务必注意,在输入a[回车]的时候,实则触发了两个cin.get()

第三和第四种重载则可以读取包含结束标记符在内的,至多n个字符,并在末尾添加空字符\0。即读取至多n-1个字符,保存在数组s中。当输入了delim时,即使还没读够n-1个字符,遇到delim时读取终止,且delim不会被存进数组s中。

getline函数

istream& getline (char* s, streamsize n);
istream& getline (char* s, streamsize n, char delim);

可以读取至多n-1个字符,保存在数组s中。当输入了delim时,即使还没读够n-1个字符,遇到delim时读取终止,且delim不会被存进数组s中。

ignore函数

istream& ignore (streamsize n, char delim);

可以跳过至多n-1个字符,读取接下来的字符。当输入了delim时,即使还没跳过n-1个字符,遇到delim时跳过终止。

对于输入了一行结束,需要消耗一个回车的情况下,ignore(1, '\n')get()可以起到相似的作用。

peek函数

int peek();

peek函数返回输入流中的下一个字符,但不从流中提取它,即不会消耗该字符。

如果到达末尾,会返回EOF。

seekg函数

istream& seekg (streampos pos);
istream& seekg (streamoff off, ios_base::seekdir way);

seekg函数用于设置输入流中的位置指针,控制从哪里开始读取。第一种重载将位置指针设置为绝对位置pos,第二种重载将位置指针设置为相对于way的偏移量off。

way是ios_base::seekdir枚举,包括:

  • ios_base::beg:从流开始处计算
  • ios_base::cur:从当前位置计算
  • ios_base::end:从流末尾计算

read函数

istream& read (char* s, streamsize n);

可以读取至多n个字符,不会在末尾自动添加空字符\0,保存在数组s中。

read是一个不安全的函数。

gcount函数

streamsize gcount() const;

gcount特意放在最后说明,这是一个计数函数,返回最后一个未格式化输入操作读取的字符数。

未格式化的输入操作例如get()getline()read()

1.1.3 输出

成员函数 说明
flush 刷新缓冲区
put 将字符放入流中
seekp 重置在输出流中的位置
write 将字符放入流中

flush函数

ostream& flush();

flush函数刷新输出缓冲区,强制将缓冲区中的所有数据写入到目标设备中。

特别的,flush同时是一个流操纵符,除了用cout.flush()调用函数,cout<<flush的效果也是相同的。

cout<<endl相比,两者都会刷新缓冲区,但cout<<endl还会输出换行。

put函数

ostream& put (char c);

put函数将单个字符c放入输出流中。

也因此,很常用这样的代码:

cout.put('H').put('e').put('l').put('l').put('o').put('\n');

seekp函数

ostream& seekp (streampos pos);
ostream& seekp (streamoff off, ios_base::seekdir way);

seekp函数用于设置输出流中的位置指针,控制从哪里开始写入。第一种重载将位置指针设置为绝对位置pos,第二种重载将位置指针设置为相对于way的偏移量off。

write函数

ostream& write (const char* s, streamsize n);

write函数将s指向的数组中的前n个字符写入输出流中,不会在末尾自动添加空字符\0

1.1.4 格式化输出

#include <iomanip>

操纵符 简介
字段宽度与填充格式
setw(n) 设置字段宽度为n
setfill(c) 设置填充字符为c
小数控制格式
setprecision(n) 设置浮点数精度为n
fixed 使用固定小数点表示法
scientific 使用科学计数法表示
showpoint 总是显示小数点
noshowpoint 不总是显示小数点
对齐格式
left 左对齐输出
right 右对齐输出(默认)
internal 在符号和数值之间填充
整数进制格式
hex 十六进制输出
dec 十进制输出(默认)
oct 八进制输出
showbase 显示进制前缀0x/0
noshowbase 不显示进制前缀
uppercase 十六进制输出使用大写字母
nouppercase 十六进制输出使用小写字母
符号显示格式
showpos 对正数显示+号
noshowpos 对正数不显示+号
布尔值格式
boolalpha 布尔值输出为true/false
noboolalpha 布尔值输出为1/0

1.1.5 字符串流

#include <sstream>

一. 主要类

字符串流将字符串作为流来处理,可以使用 >><< 操作符来读写字符串数据。

简介
istringstream 输入字符串流,从字符串读取数据
ostringstream 输出字符串流,向字符串写入数据
stringstream 输入输出字符串流,兼具两者功能

使用字符串流类似于使用基本数据类型:

istringstream iss("Hello 123");
ostringstream oss;
stringstream ss;

二. 常用成员函数

成员函数 简介
str() 获取或设置底层字符串
clear() 清除错误状态标志
seekg() 设置输入位置指针
seekp() 设置输出位置指针

str函数

string str() const;              // 获取底层字符串
void str (const string& s);      // 设置底层字符串

str 函数用于获取或设置字符串流中的字符串内容。

获取字符串:

ostringstream oss;
oss << "数值: " << 42;
string result = oss.str();

设置字符串:

istringstream iss;
iss.str("100 200");

clear函数

void clear (iostate state = goodbit);

clear 函数用于清除错误状态标志,当字符串流到达末尾或发生错误时使用。

seekg函数

istream& seekg (streampos pos);
istream& seekg (streamoff off, ios_base::seekdir way);

seekg函数用于设置输入流中的位置指针,控制从哪里开始读取。

seekp函数

ostream& seekp (streampos pos);
ostream& seekp (streamoff off, ios_base::seekdir way);

seekp函数用于设置输出流中的位置指针,控制从哪里开始写入。

全部评论

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务