之前自己经常碰到一类问题就是在oj上刷题时,偶尔碰到有关不指定输入个数然后让计算输出结果的题目,所以在搜集了相关的解题方法之后乘着这个时间写下来。
首先是不指定个数的字符串的输入,比如有这样的一道题目:
输入一串带有空格的字符串,将其空格去除然后输出。
示例
输入:
a bc fg
as dasd sd sda
输出:
abcfg
asdasdsdsda
用普通的cin>>str;肯定不行,
这个是解决的方法:
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main()
{
string str, line;
while(getline(cin, line)) //类似于while(cin>>line);输入多组带有空格的字符串
{
istringstream stream(line); //创建istringstream对象并同搜索时初始化,使其和字符串line绑定
while(stream>>str) //以空格为分隔符把该行分割开来
{
cout<<str.c_str(); //逐个输出
}
cout<<endl;
}
return 0;
}
其中使用到的是getline,完整的读入带有空格的字符串,之后再创建istringstream对象并用line初始化,之后利用stream>>str就可以将字符串按空格间隔开来,之后逐个输出即可,其实输入还可以使用gets(line),这里的line就要求是char类型的字符串数组而不是string,之后可以将char型字符串转换成string,(
直接用char型字符串对string赋值即可完成转换),只不过这样个人觉得还多了一步,采用这种比较好,有关istringstream和c_char()的知识可以看看我这里边转载的文章就会明白了,
接下来还有一个问题,就是输入的是不指定个数的整形数组怎么办,我的想法是输入仍然采用这种方法,只是在后面while(stream>>str)中多添加一步:int x = atoi(str.c_char());即可完成string类型到整形的转换,这样就解决了在刷acm题目中出现的这类不指定个数的输入问题,如果谁还有另外的方法,欢迎提出来啊,一起交流交流 0...0;