首页 > 解决方案 > 删除给定字符串中所有出现的单词的程序

问题描述

我已经编写了代码,但输出不正确:如果我输入How you doing为原始字符串然后想要删除you,输出应该是How doing,但输出是How you doing(与输入字符串相同)。

这是我的代码:

void removeWord(char *,char *);

int main() {
    char str[100];
    printf("Enter any string: ");
    gets(str);

    char re[20];
    printf("\nEnter word to remove: ");
    gets(re);

    printf("\nString befor removing '%s' : \n%s", re, str);

    removeWord(str, re);

    printf("\nString after removing '%s' : \n%s", re, str);

    return 0;
}

void removeWord(char *str, char *re) {
    int slen, rlen, found, j;

    slen = strlen(str);
    rlen = strlen(re);

    for (int i = 0; i <= slen - rlen; i++) {
        found = 1;
        for (j = 0; j < rlen; j++) {
            if (str[i + j] != re[i + j]) {
                found = 0;
                break;
            }
        }
        if (str[i + j] != ' ' && str[i + j] != '\t' && str[i + j] != '\n' && str[i + j] !='\0')
            found = 0;

        if (found == 1) {
            for (int k = i; k <= slen - rlen; k++)
                str[k] = str[k + rlen];

            slen -= rlen;
            i--;
        }
    }
}

标签: cstring

解决方案


您可以使用预定义的函数来获取子字符串的第一个索引。在 C 中,我们有函数 'strstr()' 。如果字符串中存在子字符串,它将返回该子字符串的第一个索引,否则如果不存在,它将返回该数据数据类型中可能的最高值。

在 cpp 我们有 'size_t found = str.find(substr); ' 查看这篇关于C++ 中 GFG 字符串查找的文章


推荐阅读