翻轉英文句子中單詞的順序
阿新 • • 發佈:2019-01-03
利用字串中的索引下標進行定位,先將整個英文句子翻轉,而後將每個英文單詞進行翻轉
/* *程式說明:將一個英文句子翻轉,單詞中的字母順序不變 *程式思路: 先將整個句子翻轉,然後將各個單詞中的字母順序翻轉 */ #include <iostream> #include <string> using namespace std; //將從指標begin到end指標之間的字元進行反轉,其中也包括begin和end所指向的字元 void reverseWord2(char *begin,char *end){ if(begin == NULL || end == NULL){ return; } while(begin < end){ char temp = *begin; *begin = *end; *end = temp; --end; ++begin; } } int main(int argc, char *argv[]) { char s[] = "I am a student"; reverseWord2(&s[0],&s[strlen(s) - 1]); cout<<"將整個句子翻轉過來之後的新的句子為:"<<s<<endl; //以空格為分割點,將字串的每個單詞進行反轉 int i = 0,j = 0; while(i != strlen(s)){ while(i != strlen(s) && isspace(s[i])){ cout<<"i++"<<endl; ++i; } cout<<"此時的i="<<i<<endl; j = i; while(j != strlen(s) && !isspace(s[j])){ cout<<"j++"<<endl; ++j; } cout<<"此時的j="<<j<<endl; cout<<"第一個單詞翻轉之前為:"; for(int k = i;k < j;k++){ cout<<s[k]; } cout<<endl; //此處傳引數一定要傳入&s[j-1],記住,一定是j-1,不能是j, //因為reverseWord2這個函式時把從i到j之間的字母翻轉過來,包括了j,然而經過while迴圈之後j已經指向了單詞之間的空格 reverseWord2(&s[i],&s[j-1]); cout<<"第一個單詞翻轉之後的結果為:"; for(int l = i;l < j;l++){ cout<<s[l]; } cout<<endl; cout<<"接下來讓i在j的位置的基礎上再往前一步,跳過這個空格"<<endl; i = j; } //輸出字串 for(int i = 0;i < strlen(s);i++){ cout<<s[i]; } return 0; }