题目要求:
有A、B两个字符串,输出字符串A、B的最长公共单词。
解题思路:
处理字符串,使用strtok()分割单词,存入数组中;
使用、用strcmp()比较两个单词是否相等;
使用strlen()求单词长度。
实现代码:
int main()
{
char a[] = "world, hello!";//待比较的第一个字符串
char b[] = "123,第二个字符串,hello.";//待比较的第二个字符串
char c[] = " !,.";//字符串的分隔符组成的串
//存放a、b字符串的单词的数组
char* aa[sizeof(a)/sizeof(a[0])],* bb[sizeof(b) / sizeof(b[0])];
char* s1,* s2;//临时指向单词头的指针
unsigned int len = 0;//记录最长单词长度
//分割并存储字符串a
int i = 0;
for (s1 = strtok(a, c); s1 != NULL; s1 = strtok(NULL, c))
{
aa[i++] = s1;
}
//分割并存储字符串b
int j = 0;
for (s2 = strtok(b, c); s2 != NULL; s2 = strtok(NULL, c))
{
bb[j++] = s2;
}
//对比每个相等单词长度
char *r = nullptr;//r指向最长的公共单词
for(int k = 0;k<i;k++)
for(int h = 0;h<j;h++)
if (strcmp(aa[k],bb[h]) == 0)
if (strlen(aa[k]) >= len)
{
r = aa[k];
len = strlen(aa[k]);
}
//输出结果
cout << len << endl;
cout << r << endl;
}
运行结果
函数解释:
分割字符串:strtok()
返回在 strToken中指向下一个标记的指针。 当未找到其他标记时,它们返回 NULL 。 通过为返回标记后出现的第一个分隔符替换 NULL 字符,每个调用修改 strToken 。
char *strtok(
char *strToken,
const char *strDelimit
);
/*
strToken
字符串包含一个标记或一个以上的标记。
strDelimit
分隔符的设置。
*/