题目地址:http://ac.jobdu.com/problem.php?pid=1525
- 题目描述:
小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩其中的连续空格为1个。
- 输入:
输入包含多个测试用例,每个测试用例的第一行是一个正整数 n,1=<n<=100000,代表卡片上字符串的长度。第二行输入长度为n的字符串(字符串仅包含小写字母和空格)。当n为0时,代表输入结束。
- 输出:
对应每个测试用例,请按照要求输出修正过的字符串。
- 样例输入:
3 abc 13 abc efg hij
- 样例输出:
cba cba gfe jih
- 来源:
- 2012年Google校园招聘笔试题目
#include <stdio.h>#define MAX 100001int Delete_Blank (char str[], int n){int i, j;int flag;int cnt;cnt = 0;i=0;j=0;while (i < n){str[j] = str[i];if (str[i] == ' '){while (str[++i] == ' ')continue;++j;str[j] = str[i];}else{++i;++j;}}str[j] = '\0';return j;
}void Reverse (char str[], int start, int end){char tmp;while (start < end){tmp = str[start];str[start] = str[end];str[end] = tmp;++start;--end;}
}int main(void){char str[MAX];int n;int i;int start, end;while (scanf ("%d", &n) != EOF){while (getchar () != '\n')continue;gets (str);n = Delete_Blank (str, n);for (i=0; i<n; ++i){if (str[i] != ' '){start = i;while (++i < n && str[i] != ' ')continue;end = i - 1;Reverse (str, start, end);}}puts (str);}return 0;
}