C++ istringstream用法详解
追光的人-fighting 2024-06-19 11:05:06 阅读 59
std::istringstream 是 C++ 标准库中的一个输入流类,用于从字符串中读取数据。它提供了类似于 std::cin 的接口,可以方便地从字符串中提取数据,并将其转换为不同的数据类型。
目录
1. 需要包含头文件
2. 创建 std::istringstream 对象并初始化
3. 从 std::istringstream 中提取数据
4. 检查提取是否成功
5. 关闭 std::istringstream 对象(可选)
6. 设置精度和格式
7. 跳过特定字符
8. 分割字符串
9. 检查流状态
10. 转换为其他数据类型
11. 重复使用
1. 需要包含头文件
#include <sstream>
2. 创建 std::istringstream 对象并初始化
std::string str = "123 4.56 hello";
std::istringstream iss(str);
3. 从 std::istringstream 中提取数据
使用 >> 操作符可以从 std::istringstream 中提取数据,就像从 std::cin 中读取数据一样。
可以按照需要提取不同类型的数据,比如整数、浮点数、字符串等。
int num;
float fnum;
std::string word;
iss >> num >> fnum >> word;
4. 检查提取是否成功
在提取数据后,通常可以通过检查 std::istringstream 的状态来确保数据提取成功。
if (iss.fail()) {
// 数据提取失败,可能是类型转换错误或数据不匹配
} else {
// 数据提取成功
}
5. 关闭 std::istringstream 对象(可选)
在使用完 std::istringstream 后,可以选择关闭对象。
iss.str(""); // 清空缓冲区
iss.clear(); // 清除状态标志
6. 设置精度和格式
可以使用 std::setprecision、std::fixed、std::scientific 等控制符来设置提取浮点数时的精度和格式。
iss >> std::setprecision(2) >> std::fixed >> fnum;
std::setprecision(2)
指定了将浮点数转换为字符串时保留两位小数。
当使用
std::fixed
后,浮点数将以固定的小数位数进行输出,不会自动切换为科学计数法
fnum
是一个浮点数变量,用于存储从std::istringstream
中提取的数据。
7. 跳过特定字符
可以使用 std::getline 函数跳过特定字符,比如空格、逗号等。
std::string temp;
getline(iss, temp, ','); // 在遇到逗号之前的所有内容都会被读取到 temp 中
8. 分割字符串
以:分割字符串str
string str = "sss:werf:erqef:eraefqef";
istringstream iss(str);
string tostr;
vector<string>& strvec;
while (getline(iss, tostr, ':'))
{
strvec.push_back(tostr);
}
9. 检查流状态
可以使用 good()、eof()、fail()、bad() 等函数来检查流的状态,以确保数据提取的正确性。
if (!iss.good()) {
// 处理流错误
}
10. 转换为其他数据类型
可以将提取的数据转换为其他数据类型,比如将字符串转换为整数、浮点数等。
std::string numStr = "42";
int num = 0;
iss.str(numStr);
iss >> num;
11. 重复使用
可以重复使用同一个 std::istringstream 对象来提取不同部分的数据。
std::string str = "apple orange banana";
iss.str(str);
std::string fruit;
while (iss >> fruit) {
// 依次提取每个
}
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。