Re: [問題] strtok 反轉印出字串
我把原始碼改成這樣, 會比較好理解中間得到的結果是什麼:
https://gist.github.com/4465728
在這邊 str() 的參數 array 其實是多餘的, 可以把它刪除就
像這樣:
https://gist.github.com/4465761
--
仔細看一下程式碼, 當你呼叫 strtok() 並且第一個引數為非
NULL 的時候, string 丟進去就會被 strtok() 綁架走, 往後
呼叫 strtok( NULL, ... ) 它就會吐給你把 string 大卸八塊
的結果, 回傳為 NULL 代表屍體已經切到不能再切了
在 str() 之中:
char *token = strtok( NULL, " " ); // 先切一塊出來放著
if( token != NULL ) {
str(); // 剩下的再拿去剁一剁, 順便印出來
cout << "\"" << token << "\"" << endl; // 印出剛切出來那塊
}
這邊會用屍體的比喻是想傳達一旦字串陣列被當作 strtok()
的參數傳進去, 基本上該陣列已經不是你能處理的情形了
這個函式不適合作為範例. 不只參數混淆了讀者, 連分割字串
的責任也一分為二(main() 也要呼叫 strtok()), 修改後的程
式碼如下(str更名為reverse_print_token)
http://liveworkspace.org/code/2Nyyrf$0
如上述網址所示, 分割出來的 tokens 都會去除空白, 不會有
不一致的情形.
※ 引述《ssadd502227 (我想考試)》之銘言:
: 這是小弟看到的範例程式
: void str(char array[]);
: int mian()
: {
: char string[]=" i love u";
: str(strtok(string," ") );
: cout<<string<<endl;
: system("PAUSE");
: return 0;
: void str(char array[] )
: {
: char *token=strtok(null," ");
: if(token !=null)
: {
: str(array);
: cout<<token<<" ";
: }
: }
: 我看了半小時還是不清楚哪邊是把字串反轉的功能,有大大可以講解一下嗎?
: 順便請問一下副函式裡的cout是幹嘛用的為啥要再多用一個?
--
≡≡≡≡╔═══╗╔═══╗ ◎ ╔═╗═╗╔═══╗╔═══╗╔╦═╦╗≡≡≡≡
≡金栽經║ ╔╗ ║║ ╔╗ ║╔╗║ ║ ║║ ═ ║║ ╔╗ ║║║ ║║RAINNOUS
≡≡≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║≡≡≡≡
≡≡≡≡║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║≡≡≡≡
≡高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧≡
≡≡≡≡≡趙賢榮≡≡≡金智淑≡≡≡RAINBOW≡≡≡盧 乙≡≡≡吳勝雅≡ψmocki
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (01/06 15:57)
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
問題
0
10