首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大部分的弦都是在和strtok分开后消失的?

问大部分的弦都是在和strtok分开后消失的?
EN

Stack Overflow用户
提问于 2012-08-14 17:50:08
回答 5查看 1.7K关注 0票数 0

e:谢谢大家,没有意识到strtok实际上修改了字符串本身。希望我以后不会那么笨了。

最近,我开始从一本书中学习C++。我现在在关于解析字符串的章节中。

我的下一个任务是将字符串的标记与strtok拆分后重新组合在一起,但是我不知道字符串的其余部分在第一个分隔符之后的位置!记住,我对这件事很陌生,如果这是个愚蠢的问题,我很抱歉。

基本上是这样的: 1。我输入了一个字符串“嗨,你好吗?”2。打印出来,正常的。3.然后我将其拆分为标记(使用分隔符和空格) 4。它们都整齐地打印5。再次打印字符串,剩下的就是“嘿嘿”。

那我怎么把剩下的绳子拿回来呢?

这是我的密码:

代码语言:javascript
复制
char the_string[ 81], *p;

cout << the_string << endl;

cout << "Input a string to parse: ";
cin.getline(the_string, 81);
p = strtok(the_string, ", ");
while (p != NULL) {
  cout << p << endl;
  p = strtok(NULL, ", ");
} 

cout << the_string << endl;
EN

回答 5

Stack Overflow用户

发布于 2012-08-14 17:53:02

strtok()修改它所操作的字符串:

如果str != NULL,则函数将搜索第一个不是分隔符的字符。这个字符是标记的开始。然后,函数搜索第一个分隔符。这个字符是令牌的结尾。如果在找到令牌结束之前遇到str的结束,则函数终止并返回NULL。否则,指向令牌结束的指针将保存在静态位置,以便进行后续调用。这个字符然后被一个空字符替换,函数返回一个指向令牌.开头的指针。

在传递到strtok()之前,复制字符串。

在C++中有更好的方法来实现这一点,但是由于这听起来像是家庭作业,所以您可能不被允许使用它们。

票数 4
EN

Stack Overflow用户

发布于 2012-08-14 17:53:52

strtok()通过在找到令牌时插入'\0'来更改它所操作的字符串。

因此,字符串"one two three\0" (显式'\0' for reference)在被空格标记时被更改为"one\0two\0three\0",大多数字符串操作将其视为"one" (我现在已经删除了'\0' )。

票数 4
EN

Stack Overflow用户

发布于 2012-08-14 17:53:59

下次使用函数时,请阅读它的手册页(更仔细)。Strtok()通过用null字符替换分隔符的第一个字符来标记字符串。您的字符串最终被修改为。类似的内容(\0表示NUL char):

代码语言:javascript
复制
Hey\0 how\0 are\0 you?\0

在将字符串传递给strtok()之前,先进行Str凭着()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11957901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档