字串操作,翻轉句子中單詞的順序--經典面試題兩種解法
阿新 • • 發佈:2018-12-26
題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。
句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。
方法二:將讀取的一行內容存放到string中,將string作為流進行讀寫。
例如輸入“I am a student.”,則輸出“student. a am I”。
方法一:C語言字串經典操作,判別單個字元是否為空格來擷取單詞。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=10000; int flag=0,first,last; char line[maxn]; void out(char line[],int first,int last){ if(flag++) printf(" "); for(int i=first;i<=last;i++) printf("%c",line[i]); } int main(){ while(cin.getline(line,maxn)){ flag=0,first=last=strlen(line)-1; while(first>0){ if(line[first]==' '){ out(line,first+1,last); first=last=first-1; }else{ first--; } } out(line,first,last); printf("\n"); } }
方法二:將讀取的一行內容存放到string中,將string作為流進行讀寫。
#include<iostream> #include<string>//為了string類 #include<sstream>//為了stringstream using namespace std; int main(){ string line; char s[100][100]; while(getline(cin,line)){//注意getline的用法,讀取一行,不用指定大小 int flag=0,i=0; stringstream ss(line);//將讀取的string型別轉換成流 while(ss>>s[i]){ i++; } for(int j=i-1;j>=0;j--){ if(flag++) cout<<' '; cout<<s[j]; } cout<<endl; } }