Re: [問題] strtok 反轉印出字串

看板C_and_CPP作者 (高髮箍)時間11年前 (2013/01/06 15:36), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
我把原始碼改成這樣, 會比較好理解中間得到的結果是什麼: 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 ≡≡║ ╚╝ ║║ ╚╝ ║║║║ ║║ ╞╣║ ║║ ║║ ║ ═╣║ ╥ ║║║║ ║ ║║ ═ ║║ ╚╝ ║║ ║ ║ 高佑麗╚═╩═╝╚═╩═╝╚╝╚═╚═╝╚═══╝╚═══╝╚═╩═╝鄭允慧 趙賢榮金智淑盧 乙吳勝雅ψmocki -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115 ※ 編輯: loveme00835 來自: 140.121.197.115 (01/06 15:57)
文章代碼(AID): #1GwIcJWB (C_and_CPP)
文章代碼(AID): #1GwIcJWB (C_and_CPP)