istringstream的用法——处理未说明数量的一行输入

istringstream对象可以绑定一行字符串,默认以空格为分隔符把该行分隔开来。

若分隔符不是空格,则需使用对象里的ignore(int x,char ch)函数,x是指'<<'操作一次最多可提取字符的数量,ch是分隔符。ignore函数是一次性的。

头文件为<sstream>。


/*************************************************************************
     File Name: test.cpp
     ID: obsolescence
     BLOG: http://blog.youkuaiyun.com/obsolescence
     LANG: C++ 
     Mail: 384099319@qq.com 
     Created Time: 2016年08月01日 星期一 09时16分24秒
 ************************************************************************/
#include<bits/stdc++.h>
using namespace std;

int main() {
  string s,line;
  while (getline(cin,line)) {
    istringstream str(line);
    while (str>>s)
      cout<<s<<endl;
  }
}
C++中,当你希望通过空格作为分隔符来读取输入时,可以利用标准库提供的`cin`对象来进行逐个单词的读入。下面是一个简单的例子展示如何做到这一点: ```cpp #include <iostream> #include <vector> #include <string> using namespace std; int main() { string word; vector<string> words; // 创建一个字符串向量用于存储分割后的词 cout << "请输入一些由空格分隔的文字(完成后按回车): "; while (cin >> word) { // 使用 `>>` 操作符会自动忽略空白字符,并将非空白序列作为一个完整的词语处理 words.push_back(word); // 将读到的每个词存进数组里 } cout << "\n您刚才输入的内容有:" << endl; for(auto& w : words){ cout << w << endl; } } ``` 上述程序将会一直接收用户通过键盘输入的数据直到遇到文件结束标志(通常是在命令行下按下Ctrl+D(Linux/MacOS) 或 Ctrl+Z(Windows),然后回车)。每次循环迭代过程中,它都会从流里面提取出下一个“词”——即两个空格之间的所有连续非空字符。 此外还有一种更简单的方式适用于一次性获取整行内容并基于特定分隔符如空格对这串文本做拆解的情况,这时你可以结合getline函数以及istringstream类共同完成任务: ```cpp #include <iostream> #include <sstream> #include <vector> #include <string> using namespace std; int main(){ string line, word; vector<string> tokens; getline(cin, line); // 获取一行输入 istringstream iss(line); while(getline(iss, word, ' ')){ if (!word.empty()) tokens.push_back(word); } cout << "\n解析出来的词汇为:" << endl; for(const auto &token : tokens) cout << token << '\n'; } ``` 这里我们先用`getline()`读取整个一行输入保存至变量`line`, 然后再创建了一个`istringstream`类型的对象`iss`. 接着把刚刚读取的一行输入传递给这个新的字符串流对象。接下来就可以像之前那样继续用`while(cin >> word)`的方式来遍历了,只不过这次是从我们的临时字符串流而非直接从标准输入那里获取数据;或者使用`getline(iss, word, delimiter)`指定以空格为界限进行切割操作。 这两种方法都可以很好地解决按照空格分割输入的问题,在实际应用当中可以根据需求选择最合适的方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值