釋出
2008年10月15日

strtok 的用法

評分:3.5/5 (16 票)
*****
首先,我經常訪問這個網站,但我從來沒有發過帖子。我在網上找到了很多幫助,所以我想回饋一下。我最近在做一個專案,需要使用 strtok 函式。我遇到的一個問題是,strtok 正在改變我的原始變數。我終於能夠解決我的問題,成功地複製了一個變數來進行標記化,而不會改變原始變數。



一些背景:這是設定為子類的一個函式。char 變數顯然在別處宣告,但我為了清晰起見顯示了它。另外,我使用了 strcpy_s,因為我使用的是 VS,但 strcpy 也可以(引數會有所不同)。希望透過註釋,其餘的程式碼足夠清晰易懂。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char decimalNumber[] = "12.34";

int ChildClass::getNumberBeforeDecimal()
{
	char numBeforeDecimal[6]="";
	char* token; 

	strcpy_s(numBeforeDecimal,                   //copying decimalNumber
            sizeof(numBeforeDecimal),decimalNumber); //to numBeforeDecimal
                                                

	strtok(numBeforeDecimal, ".");
	token = strtok(NULL, "."); //should assign "12" to token
	
	return atoi(token);  //converts the token and returns 12
}


現在,我還沒有測試過 *這個* 精確的程式碼(如果你發現錯誤,請隨時糾正)。我把我最初寫好的程式碼(是的,它能工作!)拿出來,試著讓它變得通用,以便於理解,而不會弄錯。哦,而且 **我知道有一種更簡單的方法可以獲取小數點前的數字。** 這只是為了幫助理解 strtok 的一個用法。稍加努力,就可以用它來返回小數點後的數字。

如果你願意,請隨時釋出 strtok 的其他用法。

祝和平,
S. Jones