您的位置:首页 > 编程语言 > C语言/C++

字符串反转C++实现

2019-04-12 02:08 99 查看

题目描述

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

输入

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

输出

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

样例输入

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

样例输出

[code]hello world!
I like acmclub.
I love acm.

本人所写的代码如下:

[code]#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次。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: