Стирание строки слова из другой строки предложения, если оно включает ее - PullRequest
0 голосов
/ 13 мая 2019

Я создаю 2 строки. Первое - это предложение, второе - это слово. Если предложение содержит слово, мы удаляем его из предложения.

Я пробовал это несколькими способами, но он всегда дает правильный ответ, если слово находится в конце предложения.

char sntc[150];
char word[30];

gets(sntc);
gets(word);

char temp[50];
int i=0;
int index=0;

while (i<strlen(sntc);) {
        for(; sntc[i] != '\0'; i++) {
                if(sntc[i] == ' ' || sntc[i] == '\0') {
                        break;
                }
                temp[index++]=sntc[i];
        }
        temp[index]='\0';
        if (strcmp(temp, word) == 0) {
                i++;
                index=0;
                continue;
        } else {
                printf("%s ", temp);
                i++;
                index=0;
        }
}

Для этого ввода:

merhaba dunyali nasilsin
dunyali

ожидаемый результат:

merhaba nasilsin

1 Ответ

3 голосов
/ 13 мая 2019

Поиск слова и перезапись его частью, которую вы хотите сохранить:

char *found;
while((found=strstr(sntc,word))!=NULL)
  strcpy(found,found+strlen(word));

Конечно, вы можете сохранить strlen(word) в переменной.
Тест: https://ideone.com/BpLRe3

Если вас беспокоит конец Вселенной, используйте memmove (а также используйте fgets, это применимо, даже если вы не беспокоитесь).Оба они требуют небольшой работы, так как fgets также хранит разрыв строки, который должен быть удален (в противном случае strstr будет искать что-то вроде word\n, предположительно напрасно), в то время как memmove перемещает память,поэтому размер должен быть указан явно, и он должен включать нулевой терминатор:

char sntc[150];
char word[30];
char *found;
size_t wordlen;
fgets(sntc,sizeof(sntc),stdin);
fgets(word,sizeof(word),stdin);
wordlen=strlen(word)-1;
word[wordlen]=0;
while((found=strstr(sntc,word))!=NULL)
  memmove(found,found+wordlen,strlen(found+wordlen)+1);
printf("%s",sntc);

Пробел все еще применяется в тесте: https://ideone.com/hvZAtm (я поставил "_dunyali "во вторую строку ввода, только с пробелом - здесь форматировщик, очевидно, съел это место, поэтому теперь он помечен подчеркиванием), но в реальной жизни вам придется позаботиться о пробелах (одна из которых обычно может быть удалена) и знаки препинания (которые могут понадобиться или не понадобиться впоследствии) вокруг слова.

...