題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入“I am a student.”,則輸出“student. a am I”。
處理方法是首先將整個句子翻轉,然後再將其中的每個單詞翻轉。
代碼如下:
#include <iostream>using namespace std;void myReverse(char*, char*);char * senReverse(char*);int main(){ char sen[]="hello, I am a student!"; char *result=senReverse(sen); cout << result << endl; return 0;}void myReverse(char *start, char *end){ char temp; while(start<end) { temp=*start; *start=*end; *end=temp; start++; end--; }}char * senReverse(char *sen){ char *start=sen, *end=sen+strlen(sen)-1; myReverse(start, end); //先反轉整個句子
/*此注釋部分是另外一種實現,只不過看起來有些繁瑣 int loc; //記錄每個單詞的長度 for(start=sen,end=start;(*end)!='\0';start+=loc) { loc=0; while((*end)!=' '&&(*end)!='\0'){end++, loc++;} end--; myReverse(start, end); end+=2; loc++; } */ end=start; while(*start!='\0') { if(*end==' '||*end=='\0') { myReverse(start, --end); if(*end=='\0') break; end+=2; start=end; } else ++end; } return sen;}