题目1525:子串逆序打印
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:3124
解决:530
- 题目描述:
-
小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩其中的连续空格为1个。
- 输入:
-
输入包含多个测试用例,每个测试用例的第一行是一个正整数 n,1=<n<=100000,代表卡片上字符串的长度。第二行输入长度为n的字符串(字符串仅包含小写字母和空格)。当n为0时,代表输入结束。
- 输出:
-
对应每个测试用例,请按照要求输出修正过的字符串。
- 样例输入:
-
3abc13abc efg hij
- 样例输出:
-
cbacba gfe jih 分析:本题遇到了比较多的问题,读入一行后,我一开始是判断abc是个串之后直接将其逆序一个一个字母输出,然后 直接输出一个空格。。。试了很久案例未能全部ac,原因是:一开始没有看懂题目那句话:压缩其中的连续空格为1个。我自己编码的意思 是逆序输出一个子串后空一格,实际上不是这个意思,题意是说有多个空格则只输出一个空格,子串逆序输出,比如一开始连续三个 空格,则首先要输出一个空格。。就这个意思。 总结:题意要弄明白,需求很重要,否则很浪费时间。以下是代码:
1 #include
2 #include 3 #include 4 #include 5 using namespace std; 6 int main(){ 7 int n, i, j, flag; 8 vector v; 9 string s, str;10 while(cin >> n){11 if(n == 0)12 break;13 v.clear();14 getchar();15 getline(cin, s);16 for(i = 0; i < n;){17 flag = 0;18 str = "";19 while(s[i] != ' ' && i < n){20 str += s[i];21 i++;22 }23 while(str == "" && s[i] == ' ' && i < n){24 flag = 1;25 i++;26 }27 if(flag == 0)28 v.push_back(str);29 else{30 str += ' ';31 v.push_back(str);32 }33 }34 for(j = v[0].length() - 1; j >= 0; j--)35 cout << v[0][j];36 for(i = 1; i < v.size(); i++){37 for(j = v[i].length() - 1; j >= 0; j--)38 cout << v[i][j];39 }40 cout << endl;41 }42 //system("pause");43 return 0;44 }