c - 查找字符串中的公共(public)字符

标签 c string function

您好,我有两个不同的字符串,我需要找到字符串中的公共(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/

相关文章:

c - 如何将 char 大小的二进制有符号数扩展为有符号 int 大小

ruby - 字符串替换 Ruby 正则表达式

python - 从数学函数创建图形

javascript - 执行带有参数的数组中的函数

c - 将两个大于 255 的数字相乘

C/为什么列表改变

python - 如何检查字符串是否是 Python 中的有效正则表达式?

sql - 如何找到始终包含确切数量的字符类型的子字符串?

javascript - 在PHP和称为PHP的Ajax中重定向的正确方法?

用于在二进制文件中显示汇编的 C 程序