给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
说明:
无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路:先去除首尾以及内含的空格,然后用word数组来记录每个单词,然后分别倒序输入到s中。
学习:网上oj因为不是一个测试样例执行一次总程序,所以全局变量应该执行一次清空一次。
1 char dealS[10000] = { 0 }; 2 char word[10000] = { 0 }; 3 4 char* reverseWords(char* s) 5 { 6 int temBegin; 7 int temEnd; 8 int k = -1,l = -1; 9 int len = strlen(s); 10 memset() 11 for (temBegin = 0; temBegin < strlen(s); temBegin++) //删除开头的空格 12 { 13 if (s[temBegin] != ' ') 14 break; 15 } 16 17 for (temEnd = strlen(s) - 1; temEnd >= 0; temEnd--) //删除结尾的空格 18 { 19 if (s[temEnd] != ' ') 20 break; 21 } 22 for (int i = temBegin; i < temEnd + 1; i++)//删除中途的空格 23 { 24 if (s[i] != ' ') 25 { 26 dealS[++k] = s[i]; 27 } 28 else if (s[i] == ' ') 29 { 30 if (s[i + 1] == ' ') //连续空格情况 31 continue; 32 else 33 dealS[++k] = ' '; 34 } 35 } 36 37 k = -1; 38 memset(s, 0, len); //清空s 39 for (int i = strlen(dealS)-1; i >= 0; i--) 40 { 41 while (dealS[i] != ' ' && i != -1) 42 { 43 word[++l] = dealS[i]; 44 i--; 45 } 46 47 for (int j = l; j >= 0; j--) 48 { 49 s[++k] = word[j]; 50 } 51 if (i != 0) //如果不是最后 52 { 53 s[++k] = ' '; 54 } 55 memset(word, 0, l + 1); //清空word 56 l = -1; 57 } 58 s[k] = '