Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

C++ strtok函式 一問~~

0 views
Skip to first unread message

unread,
Apr 21, 2004, 11:39:12 AM4/21/04
to
char seps[] = " ";
char *token;
char buffer[100];
cin.get(buffer);
token = strtok( buffer, seps );
while( token != NULL ) /* While there are tokens in "string" */
{
token = strtok( NULL, seps ); /* Get next token: */
cout << token;
}
上面的程式碼可以把一段輸入的序列用空白鍵切開...
不懂ㄉ是....
請問為什麼要寫 token = strtok(NULL,seps) ? 把NULL拿去切開??

--
◎ [1;31m龍 [32m貓 [33m資 [34m訊 [35m天 [36m地 [0m( [1mbbs.mgt.ncu.edu.tw [0m)
◎[ [1;33;46mmingtai [0m]From: ip071.puli21.ncnu.edu.tw

Bug J.

unread,
Apr 21, 2004, 1:54:15 PM4/21/04
to
==> 在 mingt...@bbs.mgt.ncu.edu.tw (無) 的文章中提到:

> char seps[] = " ";
> char *token;
> char buffer[100];
> cin.get(buffer);
> token = strtok( buffer, seps );
> while( token != NULL ) /* While there are tokens in "string" */
> {
> token = strtok( NULL, seps ); /* Get next token: */
> cout << token;
> }
> 上面的程式碼可以把一段輸入的序列用空白鍵切開...
> 不懂ㄉ是....
> 請問為什麼要寫 token = strtok(NULL,seps) ? 把NULL拿去切開??

表示 "延續之
--
* Post by mingchieh from bugj.Dorm11.NCTU.edu.tw
* Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>

狐狸是人類忠實朋友

unread,
Apr 21, 2004, 7:24:27 PM4/21/04
to

※ 引述《mingt...@bbs.mgt.ncu.edu.tw (無)》之銘言:

> char seps[] = \" \";
> char *token;
> char buffer[100];
> cin.get(buffer);
> token = strtok( buffer, seps );
> while( token != NULL ) /* While there are tokens
in \"string\" */
> {
> token = strtok( NULL, seps ); /* Get next token: */
> cout << token;
> }
> 上面的程式碼可以把一段輸入的序列用空白鍵切開...
> 不懂ㄉ是....
> 請問為什麼要寫 token = strtok(NULL,seps) ? 把NULL拿去切開??

因為strtok要把字串不斷的切割下去, 所以要延續上一次被strtok(buffer, seps)
的buffer字串, 故第二個strtok裡頭必須寫NULL, 表示繼續buffer的token動作.

這種寫法實在有點!*(&$, 幹嘛不發明一個regex或是split物件....

--
機關算盡太聰明,反誤了卿卿性命~~

--
[m○ Origin: 新竹師院 風之坊﹝bbs.NHCTC.edu.tw﹞From: !211.23.203.218

╮( ̄▽ ̄)╭

unread,
Apr 22, 2004, 1:26:58 AM4/22/04
to
※ 引述《iostre...@bbs.nhctc.edu.tw (狐狸是人類忠實朋友)》之銘言:
: ※ 引述《mingt...@bbs.mgt.ncu.edu.tw (無)》之銘言:

: > char seps[] = \" \";
: > char *token;
: > char buffer[100];
: > cin.get(buffer);
: > token = strtok( buffer, seps );
: > while( token != NULL ) /* While there are tokens
: in \"string\" */
: > {
: > token = strtok( NULL, seps ); /* Get next token: */
: > cout << token;
: > }
: > 上面的程式碼可以把一段輸入的序列用空白鍵切開...
: > 不懂ㄉ是....
: > 請問為什麼要寫 token = strtok(NULL,seps) ? 把NULL拿去切開??
: 因為strtok要把字串不斷的切割下去, 所以要延續上一次被strtok(buffer, seps)
: 的buffer字串, 故第二個strtok裡頭必須寫NULL, 表示繼續buffer的token動作.
: 這種寫法實在有點!*(&$, 幹嘛不發明一個regex或是split物件....
這是延續下來C的東西吧....C時代沒有物件這東西...

--
I am too lost in you...

--
[m [1;33;46m〒作者:cplusplus 來自:219053.D13-219.ncu.edu.tw [m
[1;36m◎二進位的世界 [37m【140.115.50.50‧binary.csie.ncu.edu.tw

0 new messages