Программа для удаления всех вхождений слова в заданную строку - PullRequest
0 голосов
/ 09 апреля 2020

Я написал код, но вывод не соответствует действительности: если я введу 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--;
        }
    }
}

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

вы можете использовать предопределенную функцию, чтобы получить первый индекс подстроки. В C у нас есть функция 'strstr ()'. Если в строке присутствует подстрока, она вернет первый индекс этой подстроки, в противном случае, если она отсутствует, она вернет максимально возможное значение в этом типе данных.

В cpp мы имеем 'size_t found = str.find (зиЬзЬги); 'проверьте эту статью на поиск строки GFG в C ++

0 голосов
/ 10 апреля 2020

Это лучший способ удалить подстроку из заданной строки.

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

  }

Проверить вывод этой программы

0 голосов
/ 09 апреля 2020

Вот обновление вашего кода, которое делает это:

У вас был какой-то код, чтобы поймать угловой случай, который доставлял ему много проблем. Я прокомментировал это, поскольку я не понимал цель. Посмотрите на это, если я пропустил, почему это важно. Я также исправил несколько ошибок индексации.

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

Output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...