2年前去t公司面試,面試官給了我一張紙一支筆,說寫個程式吧,輸入乙個字串然後反序輸出。我問輸入輸出是用函式引數呢還是系統i/o,面試官說隨你便,寫完了說說各有什麼優缺點吧。當時我大三,沒有參加過acm沒有實驗室經歷除了課程設計也沒寫過什麼程式,完全小白。當然至今也仍然是菜鳥乙隻,不堪回首啊。
方法一:據說有庫函式strrev()啊
1234567
891011
1213
14
#include #include int main(int argc, char* ar**)
char* str = ar**[1];
strrev(str);
printf("reversed string: %s/n", str);
return 0;
}
結果linux下編譯報錯,說找不到strrev()這個函式,我勒個去,坑爹呢這是?vs2010編譯通過正常執行。好吧,還是自己來寫乙個吧~
方法二:首尾互換
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
#include #include using namespace std;
char *reverse(char *str)
return str;
}int main(int argc, char* ar**)
cout << "reversed string: " << reverse(ar**[1]) << endl;
return 0;
}
終於都通過了啊。就用了個迴圈把字串裡的字元逐個首尾互換了。啥?效能?有啥問題?沒看到每次進迴圈都要新建變數tmp嗎?這這這。。。這也有影響?好吧,把這個宣告放到迴圈外面。還能提公升麼?去掉字元互換操作!!直接從尾巴倒過來輸出不就得了~
方法三:從尾到頭
1234567
891011
1213
1415
1617
18
#include #include using namespace std;
int main()
cout << endl;
return 0;
}
這回用了i/o做輸入,並且還能保留原來的字串不變。嗯,不錯不錯,其實我們連字串長度都不需要知道。再寫乙個~
方法四:遞迴
1234567
891011
1213
1415
1617
1819
#include using namespace std;
void reverse(char *str)
int main()
; cout << "input: ";
cin >> str;
reverse(str);
cout << endl;
return 0;
}
估計一般沒人會這麼寫吧。。。
輸出字串
5.連線字串 半形句號 是字串連線符,可以把兩個字串連線成乙個字串。例如7 5 echo str.url 技巧 我們可以使用字串連線符累加字串。例如7 6 第一句我們給 str賦值,str表示字串 php中文社群位址是 第二句表示在 str的值上累加字串 www.phpnet.cn 所以,str最後...
輸出字串Count and Say
最近研究輸出字串,稍微總結一下,以後繼續補充 標題如下 the count and say sequence is the sequence of integers beginning as follows 1,11,21,1211,111221,1is read off as one 1 or11...
C C 18 3 遞迴反向輸出字串
遞規反向輸出字串的例子,可謂是反序的經典例程 遞規反向輸出字串 include include include include include using namespace std void inverse char p int main 對於檔案操作 遞規反向輸出字串 檔案為逐行倒敘 inclu...