我想比较两个包含一些其他字符的字符串。为了消除这些字符,我使用了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应该包含“ *”。
答案 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
}