Tag: delimiter

有没有办法在C中计算令牌?

我正在使用strtok将字符串拆分为令牌。 有没有人知道任何实际计算令牌数量的函数? 我有一个命令字符串,我需要拆分它并将参数传递给execve() 。 谢谢! 编辑 execve将参数作为char** ,所以我需要分配一个指针数组。 我不知道有多少分配而不知道有多少令牌。

实现`strtok`,其分隔符有多个字符

代码段: char str[] = “String1::String2:String3:String4::String5”; char *deli = “::”; char *token = strtok(str,deli); while(token != NULL) { printf(“Token= \”%s\”\n”, token); token=strtok(NULL,deli); } 上面的代码片段产生输出: Token=”String1″ Token=”String2″ Token=”String3″ Token=”String4″ Token=”String5″ 但我希望输出为: Token=”String1″ Token=”String2:String3:String4″ Token=”String5″ 我知道我没有得到预期的输出,因为strtok的第二个参数中的每个字符都被视为分隔符。 为了获得预期的输出,我编写了一个程序,它使用strstr (以及其他东西)将给定的字符串拆分为标记,以便获得预期的输出。 这是程序: #include #include #include #include int myStrtok(char* str,char* deli) { if(str==NULL || deli==NULL) return -1; int tokens=0; char *token; char […]

strtok()问题:如果标记由分隔符分隔,为什么分隔符和空’\ 0’之间的最后一个标记?

在下面的程序中, strtok()在主要部分按预期工作,但我无法理解一个发现背后的原因。 我读过关于strtok() : 为了确定令牌的开始和结束,该函数首先从起始位置扫描未包含在分隔符中的第一个字符(它成为令牌的开头)。 然后从令牌的这个开头开始扫描包含在分隔符中的第一个字符,这将成为令牌的结尾。 资料来源: http : //www.cplusplus.com/reference/cstring/strtok/ 而且我们知道, strtok()在每个令牌的末尾放置一个\0 。 但是在下面的程序中,最后一个分隔符是一个点( . ),之后在该点和引号( ” )之间有Toad 。现在,dot是我程序中的分隔符,但在Toad之后没有分隔符,甚至不是白色空间(这是我程序中的分隔符)。请清除以下由此前提产生的混乱: 为什么strtok()将Toad视为令牌,即使它不在2个分隔符之间? 这是我在遇到NULL字符( \0 )时读到的关于strtok() )的内容: 一旦在strtok的调用中找到了str的终止空字符,所有后续调用此函数并使用空指针作为第一个参数返回空指针。 资料来源: http : //www.cplusplus.com/reference/cstring/strtok/ 没有任何地方说过一旦遇到一个空字符,就会返回一个指向令牌开头的指针(我们甚至没有令牌,因为我们没有得到令牌的结尾,因为没有找到分隔符字符在从令牌的开头开始扫描之后(即从Toad的’T’开始),我们只发现了一个空字符, 而不是一个分隔符 。 那么为什么参数字符串的最后一个分隔符和引号之间的部分被strtok()视为一个标记? 请解释一下。 码: #include #include int main () { char str[] =” Falcon,eagle-hawk..;buzzard,gull..pigeon sparrow,hen;owl.Toad”; char * pch=strtok(str,” ;,.-“); while (pch != NULL) { […]