gpt4 book ai didi

c - strtok 删除除第一个标记之外的字符串

转载 作者:行者123 更新时间:2023-11-30 21:42:31 24 4
gpt4 key购买 nike

我有包含歌曲详细信息的链接列表,想要比较两个歌曲名称...附加任务是通过比不同单词更多的相似单词来比较它们...我使用 strtok 逐字获取它,然后检查如果当前单词包含在另一个名称中...但是当我这样做时,strtok 清除除第一个单词之外的字符串...我怎样才能摆脱它?

   while (next_token)
{
currentCounter++;
if (searchword(temp->author, next_token)==1)
{
counter++;
}
next_token = strtok(NULL, " ");

}

最佳答案

strtok 通过用 0 覆盖分隔符来修改输入数组;并不是第一个标记之后的所有内容都被删除或清除,只是第一个标记后面有一个字符串终止符,所以在它被打印之后什么也没有。

例如:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main( void )
{
char str[] = "This is a test";
printf( "before strtok: " );
for ( size_t i = 0; i < sizeof str; i++ )
{
if ( isprint( str[i] ) )
putchar( str[i] );
else
putchar( '.' );
}
putchar ( '\n' );

char *token = strtok( str, " " );
while ( token )
{
printf( "token = %8s, str = ", token );
for ( size_t i = 0; i < sizeof str; i++ )
{
if ( isprint( str[i] ) )
putchar( str[i] );
else
putchar( '.' );
}
putchar( '\n' );
token = strtok( NULL, " " );
}

printf( "after all strtok: " );
for ( size_t i = 0; i < sizeof str; i++ )
{
if ( isprint( str[i] ) )
putchar( str[i] );
else
putchar( '.' );
}
putchar( '\n' );

return 0;
}

这是输出(在本例中 . 代表 0):

before strtok: This is a test.
token = This, str = This.is a test.
token = is, str = This.is.a test.
token = a, str = This.is.a.test.
token = test, str = This.is.a.test.
after all strtok: This.is.a.test.

strtok 调用之后,所有其他标记仍然存在,但是因为我们用 0 覆盖了空格,所以所有常规文本处理例程 (strcpystrcatprintfputs 等)仅看到第一个标记。

如果您想保留原始字符串的内容,则必须将它们复制到另一个缓冲区中,并在该缓冲区上执行 strtok 调用。

关于c - strtok 删除除第一个标记之外的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43813736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com