Удалить строку из строки в C - PullRequest
0 голосов
/ 05 мая 2020

Я делаю программу, которая получает от пользователя 2 строки, а затем удаляет вхождения второй строки из первой.

Направления программы: Вторая строка определяется как любая строка символов, содержащая алфавиты, специальные символы, числа или даже пробелы, которые могут присутствовать или не присутствовать в исходной строке. Он также может присутствовать несколько раз в одной и той же входной строке.

Я могу иметь строки длиной до 100 символов.

1) Получение входных строк одну за другой из пользователь, пока не будет введен символ новой строки.

2) Я хочу написать функцию для проверки вхождения строки шаблона в первую, а затем удаляет ее из первой.

3 ) Если я найду строку, верните 1, в противном случае верните 0. Он напечатает результирующую строку с удаленными символами, если таковые существуют.

Вот мой код:

#include <stdio.h>
#define STRING_SIZE 100


int remover(char *s1, char *s2, char *s3)
{
   int i = 0, j, k,t=0;
   while (s1[i])    
   {
       for (j = 0; s2[j] && s2[j] == s1[i + j]; j++);  
          if (!s2[j])          
             {
                 for (k = i; s1[k + j]; k++)  
                    s1[k] = s1[k + j];
                    s1[k] = 0;
                    s3[t]=s1[k + j];
                    t++;
              }
          else
              i++;    
    }
    if(strlen(s2)>1){
        return 1;
    }
    return 0;
}


int main() {
    char result_string[STRING_SIZE];
    char MainString[STRING_SIZE], PatternString[STRING_SIZE];

    printf("Please enter the main string..\n");
    fgets(MainString,STRING_SIZE,stdin);


    printf("Please enter the pattern string to find..\n");
    fgets(PatternString,STRING_SIZE,stdin); 


    int is_stripped = remover(MainString,PatternString,result_string); // Your function call here..


    printf("> ");
    printf(is_stripped ? result_string : "Cannot find the pattern in the string!");
    return 0;
}

Не работает: (

Некоторые примеры правильного вывода:

Please enter the main string..                                                                                       
This is an example string.                                                                                                               
Please enter the pattern string to find..                                                                            
ple str 
>This is an examing.

Please enter the main string..                                                                                       
This is an example input string.                                                                                                               
Please enter the pattern string to find..                                                                            
Bazinga
>Cannot find the pattern in the string!

Please enter the main string..                                                                                       
A string is string.                                                                                                               
Please enter the pattern string to find..                                                                            
str 
>A ing is ing.

**In this case, the pattern string was empty:**
Please enter the main string..                                                                                       
This is an example input string.                                                                                                               
Please enter the pattern string to find..                                                                            

>Cannot find the pattern in the string!

**In this case, the input was whitespace:**
Please enter the main string..                                                                                       
This is an input. This is after period.                                                                                                               
Please enter the pattern string to find..

Thisisaninput.Thisisafterperiod.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Я немного изменил ваш код.

int remover(char *s1, char *s2, char *s3)
{
   int i = 0, j,t=0,found;

   while (s1[i])
   {
       found=1;//Initilize found to true
       for (j = 0;s2[j]!=0; j++){
        if(s1[i+j]!=s2[j])
            found=0;//Set not found
       }
       if(found==0){
        s3[t]=s1[i];// if not found add char to s3.
        t++;
       }
       else{
        i=i+strlen(s2)-1;//if found skip
       }
              i++;
    }
    s3[t]=0;
    if(strlen(s1)>strlen(s3)){
        return 1;
    }
    return 0;
}
0 голосов
/ 05 мая 2020
char *strdelstr(char *s1, char *s2) {
  char *loc = strstr(s1, s2);

  if(loc != NULL)
    strcpy(loc, loc + strlen(s2));

  return s1;
}

Это очень просто. Но могут быть более эффективные способы сделать это.

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