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

之前自己经常碰到一类问题就是在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;

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值