问题:
比如让循环读取一行数字“1 2 3;4 5 6;7 8 9;”
并且取出各个数字1,2,3,4,5,6,7,8,9
说明:输入只有一行,以‘;’为分隔符,其实是三行数字,但是注意最后结尾有一个‘;’(如果没有这个分号,代码将发生很大变化)。每行数字以空格分割。
解决:使用C++里面的getline和sstream。代码如下。
#include<iostream>#include<sstream>
#include<string>
using namespace std;
int main(){
string line;
string item;
while(getline(cin,line,';')){
istringstream items(line);
while(items>>item){
cout<<item<<endl;
}
}
return 0;
}
代码说明:
(1)getline从cin或者文件中读取整行字符串,getline(cin,line,';')的第三个参数表示getline的终止符。
(2)istringstream 必须包括头文件#include<sstream>,并且默认只能以空格、换行、制表符作为分隔符,不能想getline指定分隔符。
PS:如果输入变为:(最后一个分号';'没有了)
比如让循环读取一行数字“1 2 3;4 5 6;7 8 9”
则读取程序就无法再使用getline指定分割符实现了分行读取了(因为最后一行没有‘;’,程序无法读取最后一行):这个时候的思路是:
使用getline(cin,line)读取“1 2 3;4 5 6;7 8 9”作为一行字符串到line中,然后自己写个程序将line拆分为多个string,对每个string进行istringstream 读取。OK。