#1413. 字符串输入输出处理实验
字符串输入输出处理实验
说明
用字符串完成以下要求
【输入】
第一行:不带空格的字符串。第二行开始:包含空格的字符串。
【输出】
第一行输出:将输入的第一行文字接到输入的第二行文字后面,做为输出的第一行
第二行输出:依次将第三行输入开始的每行的最后一个字符取出进行输出
第三行输出:总共输入的行数。
【说明】总共不超过100行
【样例输入1】
abc
123 456 789
b b c
a p p
f p
【样例输出1】
123 456 789abc
cpp
5
【提示】
cin读入数据(包括字符串)时会将空格、制表付、回车等当做数据分割符。一行中有空格视为多个输入数据。
如果要将包含空格的整行数据整行数据读入字符串,可以用getline(cin,str)。
例如输入两行数据
abc
xmlz fj xm
方法一:
string str1,str2;
cin>>str1; //第一行数据没有空格,直接用cin读入,读入后 str1的值为"abc"
getline(cin,str2); //前面的cin没有将第一行的回车处理,这时getline将继续处理,去掉第一行的回车,str2没有被赋值
cin.ignore(); // cin和getline的工作机制。cin在读取输入时,会跳过前导空白(比如空格、换行、制表符等),直到遇到非空白字符开始读取,然后在遇到下一个空白字符(比如空格或换行)时停止,但不会消耗换行符。而getline则会读取包括换行符在内的整行,并丢弃换行符。所以当用cin读取第一行后,输入缓冲区中会残留一个换行符,如果紧接着用getline,会立即遇到这个换行符,导致getline读取到空字符串。因此如果有两行数据,第一行用cin>>str1;读取,那么第二行如何直接用getline(cin,str2);将会读到空字符串。需要用cin.ignore();来清空缓冲区中残留的字符\n。
方法二:
string str1,str2;
getline(cin,str1); //读入第一行,读入后 str1的值为"abc"。且第一行的回车被去掉
getline(cin,str2); // 这时getline将得到第二行整行的信息,并将第二行的回车去掉。读入后 str2的值为"xmlz fj xm"
样例