C++ istringstream用法详解

2024-06-04 9160阅读

std::istringstream 是 C++ 标准库中的一个输入流类,用于从字符串中读取数据。它提供了类似于 std::cin 的接口,可以方便地从字符串中提取数据,并将其转换为不同的数据类型。

目录

1. 需要包含头文件

2. 创建 std::istringstream 对象并初始化

3. 从 std::istringstream 中提取数据

4. 检查提取是否成功

5. 关闭 std::istringstream 对象(可选)

6. 设置精度和格式

7. 跳过特定字符

8. 分割字符串

9. 检查流状态

10. 转换为其他数据类型

11. 重复使用


1. 需要包含头文件

  #include

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& 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) {

    // 依次提取每个

}


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]

    跳过 5