题目
A.单词反转
Time Limit: 1000 MS Memory Limit: 65536 KB
Total Submissions: 256 Accepted: 104Description
给你一些英文句子,请将这些句子中的每个英语单词反转,然后再将其输出。这里所说的英语单词仅由大、小写英文字母组成。
Input
多个英文句子,每句占一行,且每句不超过80个字符。
Output
按题目要求输出。
Sample Input
Hello world!
Happy programming, happy life!Sample Output
olleH dlrow!
yppaH gnimmargorp, yppah efil!Source
2013 Anhui College Student Programming Contest–ahfywff
思路
虽然本题看起来和PAT1009很相似,但是仔细观察会发现有很多不同。这里要求除单词内所有字母倒序外所有地方都不变,包括标点和空格。所以必须另外想办法。可以逐字符录入,先判断是否是字母,是的话储存进入单词数组,否则先倒序输出该数组,然后将刚刚录入的字符直接输出并将单词数组清空。由于’\n’也算是!(isalpha()),所以可以将所有输入的字符都作为信号单位加以判断。
代码
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int main(void) {
vector<char> icha;
char ch = NULL;
while((ch = getchar()) && (ch != EOF)){
if (isalpha(ch))
icha.push_back(ch);
else {
for (auto iter = icha.end()-1; iter >= icha.begin(); iter--)
cout << *iter;
cout << ch;
icha.clear();
}
}
return 0;
}
还是老问题,输出的时候要记得从icha.end()-1开始,不然会导致不可预料的后果(滑稽)。