字符串反转C++实现

题目描述

小C很喜欢倒着写单词,现在给你一行小C写的文本,你能把每个单词都反转并输出它们吗?

输入

输入包含多组测试样例。第一行为一个整数T,代表测试样例的数量,后面跟着T个测试样例。
每个测试样例占一行,包含多个单词。一行最多有1000个字符。

输出

对于每一个测试样例,你应该输出转换后的文本。

样例输入

3
olleh !dlrow
I ekil .bulcmca
I evol .mca

样例输出

hello world!
I like acmclub.
I love acm.

本人所写的代码如下:

#include<iostream>
#include<string.h>
using namespace std;
int main()
{   int i, j, m, k = -1;
	cin >> i;
    cin.get();                      //去掉输入i后面的换行符'\n'
	while (i--)
	{
		char*a=new char[1001];
		cin.getline(a, 1000);
		a[strlen(a)] = ' ';
		int len = strlen(a);
		for (j = 0; j <len; j++)
		{if (a[j] == ' ')
          {for (m = j - 1; m > k; m--)
		   cout << a[m];
		   if(j !=len - 1)
			cout << ' ';
			k = j;
		   }
		}
		k = -1;
		delete[]a;
		cout << endl;
	}
	return 0;
}

运行截图:

                                                  

 

注意:这里很关键的一点就是cin.get()

因为你用cin>>i来输入i的时候势必会按下空格或者是回车键(如果你输入的是2的话,你会先在键盘上敲击2,然后敲击回车键一下),回车的字符记为'\n',又由于cin输入遇到\n截止,但又不消除\n,这样\n就留在了输入流里面。接下来用cin.getline()的时候,他会先从\n读起,这样一来,第一次用cin.getline()读取的就为空值,如果你输入的i为4的话,实际上这个while()循环只执行3次(循环少执行一次,有一次的cin.getline()没有传值进去)。故我们需要用cin.get()来消除输入流中i后面的\n

缺少cin.get()的情况:

                                                      

可以看到,虽然输入为3,但循环只执行了2次。

猜你喜欢

转载自blog.csdn.net/qq_40760732/article/details/89224011