#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"

样例