您好,我有两个不同的字符串,我需要找到字符串中的公共(public)字符。我设法获得了通用字符串,但我需要为不具有相同字符的输入返回“空字符串”。
当前问题:
输入1:abc
输入 2: def
output: '//它应该是 "null string";
这是我的代码:
#include <stdio.h>
#include <string.h>
void strInterset(char * str1, char * str2, char * str3);
int main() {
char str1[50], str2[50], str3[50];
printf("Enter str1: \n");
scanf("%s", str1);
printf("Enter str2: \n");
scanf("%s", str2);
strInterset(str1, str2, str3);
if (*str3 == '\0')
printf("strIntersect(): null string\n");
else
printf("strIntersect(): %s\n", str3);
return 0;
}
void strInterset(char * str1, char * str2, char * str3) {
int i = 0, j;
for (i; *(str1 + i) != '\0'; i++) {
for (j = 0; *(str2 + j) != '\0'; j++) {
if ( *(str2 + j) == *(str1 + i)) {
strcpy(str3, str1 + i);
str3++;
}
}
}
}
最佳答案
原因是 strInterset()
仅在找到匹配项时调用 strcpy()
,而不会修改 str3
或否则它指向的数据。修复很简单 - 在 strInterset()
的循环之前添加语句
*str3 = '\0';
如果找到匹配项,strcpy()
仍将被调用。否则,在 main()
中完成的测试将会成功。
将 main()
中的数组初始化为零也适用于 strInterset()
的第一次调用。它可能不适用于后续调用(除非 main()
在每次调用之前重新初始化 str3
)。因此,最好在 strInterset()
中进行初始化。
关于c - 查找字符串中的公共(public)字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46601202/