字符串反转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次。
相关文章推荐
- 557[leetcode] C++实现反转字符串中的单词 III(557. Reverse Words in a String III)
- C++笔试题之实现字符串反转
- C++实现字符串反转
- CI1.2 用c或c++实现void reverse(char* str)函数,即反转一个null结尾的字符串
- 【C++】用C或C++实现void reverse(char* str)函数,即反转一个null结尾的字符串
- c++已经实现的2种字符串反转函数
- 算法题 用C或C++实现void reverse(char* str)函数,即反转一个null结尾的字符串
- leetcode 反转字符串 (C++实现)
- 用C++实现void reverse(char* str)函数,即反转一个null结尾的字符串.
- C/C++面试程序题(一)——字符串反转、链表反转的递归、非递归实现
- 使用C/C++实现对字符串的反转(递归和非递归)
- 反转指向字符串反转C++实现源码(带测试用例)
- 反转字符串(c++实现)
- 使用C/C++编写函数,实现字符串反转,要求不使用任何系统函数,且时间复杂度最小
- C++面试题,不使用临时变量实现字符串反转
- 字符串反转C++实现源码(带测试用例)
- C++中String类的字符串分割实现
- 实现输入字符串反转
- PHP中实现中文字符串反转避免乱码的方法
- 利用c++无序映射容器 实现传入不同字符串得到相对应的唯一整型数