本文最后更新于276 天前,其中的信息可能已经过时,如有错误请发送邮件到2401292661@qq.com
stringstream
是 C++ 标准库中 std::basic_stringstream
类的一个实例,专用于在字符串上进行输入和输出操作。它继承了 std::basic_iostream
的大部分功能。
来自库<sstream>
以下默认使用的命名空间为std
构造函数
- stringstream():创建一个空的字符串流。
- stringstream(const string& str):用给定的字符串初始化字符串流。
- stringstream(ios_base::openmode mode):用指定的打开模式创建字符串流。
- stringstream(const string& str, ios_base::openmode mode):用给定的字符串和打开模式初始化字符串流。
输入和输出
-
operator<<:用于将数据插入到流中。这些数据会被转换为字符串并添加到流的缓冲区。
stringstream ss; ss << 123 << " ABC"; //ss为123 ABC
-
operator>>:用于从流中提取数据,将其转换为相应的类型。
stringstrea ss("12 ABC"); int num; ss >> number; //若ss为12 ABC,则number=12
管理字符串内容
-
str():返回流中当前字符串的拷贝。
stringstream ss("12 ABC"); string content=ss.str(); cout << ss.str(); //ss不能直接cout,必须转换为字符串才能
-
str(const string& s):用新字符串替代当前流的内容。
stringstream ss("123 ABC"); ss.str("New content");
流状态
stringstream
对象在操作过程中如果发生错误,通常不会直接抛出异常或报错。相反,它会设置相应的状态标志(如 eofbit
、failbit
、badbit
)来表示错误状态。
流状态标志
- eofbit:流到达文件或数据的末尾。
- failbit:流操作失败,例如尝试读取不符合预期格式的数据。
- badbit:流出现严重错误,通常是I/O错误。
- goodbit:流处于良好状态,没有设置其他错误标志
检查流状态
在C++中,使用流对象的成员函数来检查流的状态。
- eof:如果流已经到达文件结束,则返回true。
- fail():如果流操作失败,则返回true。
- bad():如果流出现严重错误,则返回true。
- good():如果流状态良好,则返回true。
清除流状态
-
clear():重置流的状态标志,如
eofbit
、failbit
和badbit
,使得流可以在出错后重新使用。stringstream ss; ... if(!ss.good()) ss.clear(); //流被设置了错误状态标志,重置状态标志
管理流位置
-
seekg():设置输入位置指针。输入表示输入到其他变量中。g即get,从流中获取数据。
stringstream ss("123 ABC"); ss.seekg(4); //设置到A的位置 string t; ss >> t; //t=ABC
-
seekp():设置输出位置指针。输出表示输出到流。p即print,向流中print
stringstream ss("123 ABC"); ss.seekp(1); //设置到2的位置 ss << "New content"; //ss=1New content
-
tellg():返回当前的输入位置指针。
streampos pos = ss.tellg();
-
tellp():返回当前输出位置指针。
streampos pos = ss.tellp();
读取整行
-
getline():从流中读取一行文本。
stringstream ss("123 ABC\n569 DEF"); string line; getline(ss,line); //line=123 ABC