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

    xiaoxiao2021-03-25  67

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

    转载请注明原文地址: https://ju.6miu.com/read-41087.html

    最新回复(0)