單詞反轉_我個人的一個實現方法
阿新 • • 發佈:2018-12-01
輸入一個含有空格的英文句子,反轉句子中的單詞順序。
比如輸入“I like to listen to music in my sparetime.”,輸出"sparetime. my in music to listen to like I"這樣子……
我的實現思路是:
(1)找到空格的位置,將它們存到一個數組中
(2)以空格為界限,反轉每個單詞
(3)整體反轉整個英文句子
具體的程式碼如下:
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSPACENUM 100 void ReverseString(char *s, int from, int to); void WordsRotate(int [], int , char *); int FindSpace(int [], char *); int main() { char s[] = "I like to listen music in my sparetime."; int space[MAXSPACENUM], i = MAXSPACENUM; while(i--) //將space陣列元素初始化為-1 space[i] = -1; int spaceNum = FindSpace(space,s); //尋找句子中有幾個空格,返回結果 //假設所輸入的字串均含有空格 printf("空格個數是:%d個。",spaceNum); //我就看下對不對 printf("它們所在的位置是:"); for(i = 0; i < spaceNum; i++) printf(" %d",space[i]); printf("\n"); WordsRotate(space,spaceNum,s); printf("%s\n",s); return 0; } void ReverseString(char *s, int from, int to) { while(from < to) { char first = s[from]; s[from++] = s[to]; s[to--] = first; } } void WordsRotate(int space[],int spaceNum, char *s) { int length = strlen(s); //儲存字串長度 int i; for(i = 0; i <= spaceNum; i++) //每一次反轉之後都輸出整個字串,好理解些 { if(i == 0) { ReverseString(s,0,space[0]-1); printf("%s\n",s); } else if(i == spaceNum) { ReverseString(s,space[i-1]+1,length-1); printf("%s\n",s); } else { ReverseString(s,space[i-1]+1,space[i]-1); printf("%s\n",s); } } ReverseString(s,0,length-1); } //返回空格的個數 int FindSpace(int space[], char *s) { int length = strlen(s); int i = 0, j; for(j = 0; j < length; j++) { if( s[j] == ' ') { space[i] = j; i++; } } return i; }