strtok()的输出不同

时间:2019-04-22 12:50:18

标签: c strtok

我想比较两个包含一些其他字符的字符串。为了消除这些字符,我使用了strtok()

首先,我将字符串复制到临时缓冲区中,这将在strtok()中使用。

    #include<stdio.h>
    #include<string.h>
    int main()
    {
            char ch[50]="supl-dev.google.com";
            char ch1[50]="*.google.com";
            printf("ch =%s\n",ch);
            printf("ch1 =%s\n",ch1);
            char temp_ch[50], temp_ch1[50];
            strcpy(temp_ch,ch);
            strcpy(temp_ch1,ch1);
            char *ch_token, *ch1_token;

            ch_token = strtok(temp_ch,".");
            ch1_token = strtok(temp_ch1,"*");
            printf("ch_token=%s\n",ch_token);
            printf("ch1_token = %s\n",ch1_token);

            return 0;
    }

预期结果:

  

ch = supl-dev.google.com

     

ch1 = *。google.com

     

ch_token = supl-dev

     

ch1_token = *

实际结果:

  

ch = supl-dev.google.com

     

ch1 = *。google.com

     

ch_token = supl-dev

     

ch1_token = .google.com

在这里,我希望ch1_token应该包含“ *”。

4 个答案:

答案 0 :(得分:2)

不。您的期望是错误的。您将ch2的定界符设置为*,这意味着strtok将剥离*中的前导*.google.com并返回.google.com作为第一个令牌。要获得所需的内容,必须将定界符设置为.

    #include<stdio.h>
#include<string.h>
int main()
{
        char ch[50]="supl-dev.google.com";
        char ch1[50]="*.google.com";
        printf("ch =%s\n",ch);
        printf("ch1 =%s\n",ch1);
        char temp_ch[50], temp_ch1[50];
        strcpy(temp_ch,ch);
        strcpy(temp_ch1,ch1);
        char *ch_token, *ch1_token;

        ch_token = strtok(temp_ch,".");
        ch1_token = strtok(temp_ch1,".");
        printf("ch_token=%s\n",ch_token);
        printf("ch1_token = %s\n",ch1_token);

        return 0;
}

现在ch_token应该是supl-dev,而ch1_token应该是*

答案 1 :(得分:2)

您将ch1除以*,因此其结果是一个空字符串被忽略,其余字符串为.google.com。(它将忽略*,因为这是您的分隔符)。 只需将拆分代码更改为ch1_token = strtok(temp_ch1,".");,它将返回*google,然后返回com

答案 2 :(得分:1)

要记住的是,如果当前令牌为空,strtok将继续查找下一个令牌。

因此,当您使用定界符strtok *.google.com字符串*时,它将在第一个位置本身找到定界符。由于当前令牌为空,因此返回下一个令牌.google.com

答案 3 :(得分:0)

您所说的需要是在两个字符串中搜索一个公共子字符串。
使用strtok可能有效,但是有更简单的方法无需解析即可。

您是否考虑过使用 strstr()]

    char ch[50]="supl-dev.google.com";
    char ch1[50]="*.google.com";
    if((strstr(ch, "google.com")) && (strstr(ch1, "google.com"))
    {
        /// sub-string exists in both strings
    }