首先,我经常访问这个网站,但我从来没有发过帖子。我在网上找到了很多帮助,所以我想回馈一下。我最近在做一个项目,需要使用 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