首页 > 解决方案 > 从给定的字符串中删除一个单词

问题描述

作为作业的一部分,我一直在尝试编写代码以从输入的字符串中删除一个单词。但问题是输出的“修改过的”字符串从未真正被修改过,它实际上总是输出输入的字符串。我是字符串新手,所以我对 string.h 库函数的工作方式没有完全了解。

    #include<stdio.h>
    #include<string.h>
    int main(void)
    {

    char str[60], strtemp[60], word[10], * token;
    printf("Enter the sentence: ");
    gets_s(str);
    printf("Enter the word to be deleted: ");
    gets_s(word);

    int i = 0;
    token = strtok(str, " ");
    while (token != NULL) {

        if (!i && token != word)
            strcpy(strtemp, token);

        else if (token == word) {
            token = strtok(NULL, " ");
            continue;
        }

        else {
            strcat(strtemp, " ");
            strcat(strtemp, token);
        }
        token = strtok(NULL, " ");
        i++;
    }

    strcpy(str, strtemp);
    printf("Modified string: %s \n", str);

    }

标签: cc-strings

解决方案


添加以下内容:

char *strremove(char *str, const char *sub) {
    size_t len = strlen(sub);
    if (len > 0) {
        char *p = str;
        while ((p = strstr(p, sub)) != NULL) {
            memmove(p, p + len, strlen(p + len) + 1);
        }
    }
    return str;
}

您应该使用memmove()(也写在您的帖子评论中。)

参考:这个线程 SO


推荐阅读