看一個題目: 編寫一個程序,判斷一個字符串是否為“回文”(順讀和倒讀都一樣的字符串稱為“回文”)。
#include<iostream>#include<string>using namespace std;int main(){ string s,g; cin <<s; for( int i=0;i<s.size();i++ ) { g[s.size()-i-1]=s[i]; } if( s == g ) { 然而這個代碼并不能滿足要求,我們看到第10行的代碼,這行代碼想按位倒序把字符串s復制給字符串g,然而這個代碼并不能正常執行。有人可能會奇怪:C++中的string類定義的不是可變長字符串嗎?C++中使用string定義的字符串雖然是可變長字符串,但是不能采用上邊這種方式改變長度。上邊代碼中的字符串g沒有初始化,g[0]、g[1]這些空間都還沒有被聲明定義出來,所以不能直接訪問和使用。所以修改一下:在輸入字符串s之后把s字符串直接復制給g,這樣g的長度就被改變了,也就實現了可變長數組的功能。
修改后的代碼如下:
#include<iostream>#include<string>using namespace std;int main(){ string s,g; cin <<s; g = s; for( int i=0;i<s.size();i++ ) { g[s.size()-i-1]=s[i]; } if( s == g ) { printf("回文"); } else { printf("非回文"); } return 0;}新聞熱點
疑難解答
圖片精選