发布
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