博客
关于我
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/

    你可能感兴趣的文章
    Objective-C实现radians弧度制算法(附完整源码)
    查看>>
    Objective-C实现radianToDegree弧度到度算法(附完整源码)
    查看>>
    Objective-C实现radix sort基数排序算法(附完整源码)
    查看>>
    Objective-C实现rail fence围栏密码算法(附完整源码)
    查看>>
    Objective-C实现rayleigh quotient瑞利商算法(附完整源码)
    查看>>
    Objective-C实现RC4加解密算法(附完整源码)
    查看>>
    Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现recursive insertion sort递归插入排序算法(附完整源码)
    查看>>
    Objective-C实现recursive quick sort递归快速排序算法(附完整源码)
    查看>>
    Objective-C实现RedBlackTree红黑树算法(附完整源码)
    查看>>
    Objective-C实现redis分布式锁(附完整源码)
    查看>>
    Objective-C实现reverse letters反向字母算法(附完整源码)
    查看>>
    Objective-C实现ripple adder涟波加法器算法(附完整源码)
    查看>>
    Objective-C实现RodCutting棒材切割最大利润算法(附完整源码)
    查看>>
    Objective-C实现Romberg算法(附完整源码)
    查看>>
    Objective-C实现round robin循环赛算法(附完整源码)
    查看>>
    Objective-C实现RRT路径搜索(附完整源码)
    查看>>
    Objective-C实现rsa 密钥生成器算法(附完整源码)
    查看>>
    Objective-C实现RSA密码算法(附完整源码)
    查看>>
    Objective-C实现RSA素因子算法(附完整源码)
    查看>>