c - 从第一个字符串中的第二个字符串中删除所有出现的所有字符

标签 c linux unix system

我有一个小问题。 我有一个接受两个参数(两个字符串)的函数。例如: String1 = "你好" String2 = "狮子座" 我需要从 String1 中的 String2 中删除所有字符。在这种情况下,我的最终结果应该是:“h”。这样做时我需要合并指针!到目前为止我已经得到了这段代码,但它只是从“hello”中删除了“e”。我不知道为什么它不起作用。如果有人有更好或更有效的方法,请提供帮助!

void rmstr(char str1[], char str2[])
{

//遍历两个字符串的指针
char *p_str1 = &str1[0];
字符 *p_skip;
int 长度 = (int)strlen(str2);
诠释我;

while(*p_str1 != '\0')
{
    对于 (i = 0; i < 长度; i++)
    {
        如果(*p_str1 == str2[i])
        {
            对于(p_skip = p_str1;*p_skip == str2[i];++p_skip);
            memcpy(p_str1, p_skip, &str1[strlen(str1)+1] - p_skip);
        }

        如果(*p_str1 != '\0')
        {
           ++p_str1;
        }
    }
}
}

最佳答案

char* rmstr(char *str1, char *str2, char *ans) {
    char *p1 = str1;
    char *p2 = str2;
    char *res = ans;

    while (*p1 != '\0') {
        p2 = str2;
        while (*p2 != '\0') {
            if (*p1 == *p2)    // A character in str1 is found inside str2
                break;
            p2++;
        }
        if (*p2 == '\0') {   // No match found
            *ans = *p1;
            ans++;
        }
        p1++;
    }
    *ans = '\0';
    return res;
}

测试代码:

int main(void) {
    char str1[] = "hello";
    char str2[] = "elo";
    char ans[10];

    printf(rmstr(str1, str2, ans));

    return 0;
}

关于c - 从第一个字符串中的第二个字符串中删除所有出现的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18878754/

相关文章:

linux - linux进程间通信如何选择 "Key"?

c++ - 使用 memset 而不是 for 循环来初始化 int 时出现段错误**

c - 共享相同变量的结构的函数指针

c - 在 Linux 中运行已编译的 C 程序时权限被拒绝

bash - 从一行中提取列的值(变量)

mysql - 远程访问 MysqlDB

shell - 未生成文件描述符

c - C 数组中的指针地址

c - 为什么使用逗号运算符初始化具有多个值的变量会出错?

c - 在 C 中使用 Sizeof 和 malloc 函数