关于oj中经常碰到的输入不指定个数的输入问题

之前自己经常碰到一类问题就是在oj上刷题时,偶尔碰到有关不指定输入个数然后让计算输出结果的题目,所以在搜集了相关的解题方法之后乘着这个时间写下来。

首先是不指定个数的字符串的输入,比如有这样的一道题目:

输入一串带有空格的字符串,将其空格去除然后输出。

示例

输入:

a bc fg

as dasd sd sda

输出:

abcfg

asdasdsdsda

用普通的cin>>str;肯定不行,

这个是解决的方法:

#include  
#include  
#include 
using namespace std;  
int main()  
{  
    string str, line;  
    while(getline(cin, line))      //类似于while(cin>>line);输入多组带有空格的字符串 
    {  
        istringstream stream(line);   //创建istringstream对象并同搜索时初始化,使其和字符串line绑定 
        while(stream>>str)    //以空格为分隔符把该行分割开来 
		{
			cout<
其中使用到的是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;

 
  


你可能感兴趣的:(C++小知识)