C語言單詞的翻轉問題
阿新 • • 發佈:2018-11-12
最近一直在做PTA的程式設計題,發現這些小程式還是蠻有意思的。關於單詞的翻轉:在英文句子中,翻轉句子而英文單詞的順序不變,各單詞以空字元隔開。
基本的思路是:首先翻轉整個句子,然後翻轉單詞。
個人感覺這個方法理解不難(也是從別的大佬那借鑑的)[link]https://blog.csdn.net/yansj_scu/article/details/44599567.
還有更加簡單的方法,還需要多多學習,嘻嘻!
話不多說,上程式碼。
/* 例如:I am a student. */ #include <stdio.h> #include <string.h> void TurnSentence(char *str, int start, int end); void TurnWords(char *str, int n); void Turn(char *str, int n); void Turn(char *str, int n) { TurnSentence(str, 0, n-1); //TurnWords(str, n); } void TurnSentence(char *str, int start, int end)//翻轉整個句子,則為:tneduts a ma I { char temp; while(start < end) { temp = str[start]; str[start++] = str[end]; str[end--] = temp; } } void TurnWords(char *str, int n)//翻轉每一個單詞 { int i = 0; int j = 0; int k = 0; for (i = 0; i < n; i++) { if (str[i] != ' ') { j++; } else { TurnSentence(str, k, j - 1); k = ++j; } if (i == n-1)//最後一個單詞沒有空字元所以要加上這一步,來翻轉最後一個單詞。 { TurnSentence(str, k, j - 1); } } } int main(void) { char str[100]; int s; gets(str); s = strlen(str); Turn(str, s); puts(str); return 0; }