繁体   English   中英

删除给定字符串中所有出现的单词的程序

[英]Program to remove all occurrences of a word in given string

我已经编写了代码,但是 output 不正确:如果我输入How you doing How you doing原始字符串然后想要删除you ,则 output 应该是How doing ,而是 Z78E6221F6393D135DZF6393D135DZF681DBCEame输入字符串)。

这是我的代码:

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--;
        }
    }
}

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

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

这是从给定字符串中删除 substring 的最佳方法。

 #include<bits/stdc++.h>
  using namespace std;
  int main()  
  {
  string str="My name is ankit mishra";
  string sub="name is";
  size_t found = str.find(sub);
  int len=sub.length();
  int l=str.length();
  int len_diff=l-found+1-len;
  int tag;
  cout<<"Original String: "<<str<<endl;
  cout<<"Sub-String: "<<sub<<endl;
  int i=found;
  while(len_diff--)
  {
    str[i]=str[i+len];
    i++;
  }

  string newstr;
  for(int j=0;j<i;j++)
  newstr+=str[j];
  cout<<"New String :" <<newstr;

  }

检查此程序的 Output

这是执行此操作的代码的更新:

你有一些代码来捕捉一个给它带来很多问题的极端案例。 我把它注释掉了,因为我不明白它的目的。 如果我错过了它的重要性,请查看它。 我还纠正了一些索引错误。

#include <stdio.h>
#include <string.h>

void removeWord(char *,char *);

int main()
{
    char str[100] = {0};  //Initialize fully
    char re[20] = {0};

    printf("Enter any string: ");
    gets(str);

    printf("\nEnter word to remove: ");
    gets(re);

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

    removeWord(str,re);

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

    return 0;
}

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

    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[j])
            {
                found = 0;
                break;
            }
        }

        if(found == 1)
        {
            for(k=i;k<rlen;k++)
            {
                str[k] = str[k + rlen];
            }
            str[k] = '\0';
        }
    }
}

输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM