博客
关于我
C++ code:string stream(string流)学习大全
阅读量:334 次
发布时间:2019-03-04

本文共 2710 字,大约阅读时间需要 9 分钟。

问题一:读取文件并计算每行整数之和

在处理文件时,特别是需要读取和处理文本文件时,istringstream 是一个非常有用的工具。它能够将字符串视为输入流,从而简化了逐个读取和处理数据的过程。

实现思路:

  • 使用 ifstream 读取文件内容。
  • 逐行读取文件中的每一行,存储到一个字符串变量中。
  • 使用 istringstream 将每一行字符串转换为整数流。
  • 遍历整数流,累加每一行的整数之和。
  • 输出每一行的整数之和。
  • 代码示例:

    #include 
    #include
    #include
    using namespace std;int main() { // 打开文件 ifstream in("aaa.txt"); string s; int sum = 0; // 读取每一行 while (getline(in, s)) { // 使用istringstream将字符串转换为整数流 istringstream sin(s); int a; // 累加每一行的整数 while (sin >> a) { sum += a; } // 输出当前行的整数之和 cout << sum << endl; sum = 0; // 重置求和变量 } return 0;}

    代码解析:

    • ifstream in("aaa.txt");:打开文件aaa.txt,用于读取文件内容。
    • string s;:用于存储每一行读取的内容。
    • while (getline(in, s)):逐行读取文件内容,s 将包含每一行的内容。
    • istringstream sin(s);:将字符串s 转换为输入流sin,便于逐个读取整数。
    • while (sin >> a):从输入流sin 中读取整数a,并累加到sum 中。
    • cout << sum << endl;:输出当前行的整数之和。
    • sum = 0;:重置sum,为下一行的整数之和做准备。

    问题二:分割被空格或制表符分割的字符串

    istringstream 也可以用来分割由空格或制表符分割的字符串。例如,可以将一个字符串按空格分割成单词列表。

    代码示例:

    #include 
    #include
    #include
    using namespace std;int main() { string str = "i am a boy"; istringstream is(str); string s; while (is >> s) { cout << s << endl; } return 0;}

    代码解析:

    • istringstream is(str);:将字符串str 转换为输入流is。
    • string s;:用于存储每个单词。
    • while (is >> s):从输入流is 中读取单词s,直到读取完毕。
    • cout << s << endl;:输出每个单词。

    stringstream 的使用示例

    示例一:读取整数

    #include 
    #include
    #include
    using namespace std;int main() { stringstream buf1; buf1 << 7; int n = 0; buf1 >> n; cout << "buf1 = " << buf1.str() << " n = " << n << endl; stringstream inbuf("-10"); inbuf >> n; cout << "n = " << n << endl; stringstream buf2("test", ios::ate); buf2 << '1'; cout << buf2.str() << endl; return 0;}

    示例二:读取并修改字符串

    #include 
    #include
    #include
    using namespace std;int main() { stringstream buf("1 2"); int n = 0; buf >> n; cout << "after reading the first int from \"1 2\", the int is " << n << ", str() = \"" << buf.str() << "\"\n"; stringstream out("1 2"); out << 3; cout << "after writing the int '3' to output stream \"1 2\"", str() = \"" << out.str() << "\"\n"; stringstream ate("1 2", ios::ate); ate << 3; cout << "after writing the int '3' to append stream \"1 2\"", str() = \"" << ate.str() << "\"\n"; return 0;}

    注意事项:

    • stringstream 会分配内存来存储数据,因此如果多次使用同一个stringstream,建议在使用完毕后清空缓冲,否则可能会导致内存泄漏或性能问题。
    • 使用ios::ate 标志位可以在ostringstream 中追加写入,input 标志位可以从istringstream 中读取。

    总结

    istringstream 是一个强大的工具,能够将字符串转换为输入流,从而支持逐个读取和处理数据。它在文件处理、字符串分割以及数据转换等场景中都有广泛的应用。

    转载地址:http://inpq.baihongyu.com/

    你可能感兴趣的文章
    python中 将你的名字转化成为二进制并输出
    查看>>
    Python中*args 和**kwargs的用法
    查看>>
    Python中*args 和**kwargs的用法
    查看>>
    Python中*args和**kwargs的使用
    查看>>
    python中0、1、True、False、if条件
    查看>>
    python中argparse模块关于 parse_args() 函数详解(全)
    查看>>
    python中base64编码与解码
    查看>>
    python中break怎么用_详解Python中break语句的用法
    查看>>
    python中del函数的垃圾回收
    查看>>
    Python中DrissionPage的详细解析与实战
    查看>>
    python中enumerate、变量类型转换
    查看>>
    python中execute是啥_python – 为什么“c.execute(…)”打破循环?
    查看>>
    python中exit和break区别_Python中exit()和sys.exit()之间的区别
    查看>>
    python中h5的用法
    查看>>
    python中http协议编程_HTTP编程
    查看>>
    python中import os_Python:相对导入与绝对导入(import)、os.path、__file__
    查看>>
    python中is和==操作符
    查看>>
    Python中range对象的使用以及打印九九乘法表
    查看>>
    Python中set.discard和set.remove方法之间的运行时差异?
    查看>>
    python中tkinter中value_输入字段中的python Tkinter get()值
    查看>>