На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Ошибка при обработке строки
    Задание:
    Даны строки S и S0. Удалить из строки Sпоследнюю подстроку,совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.

    Я написал:

    ExpandedWrap disabled
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      #define MAX 100
       
      int main (void)
       
      {
          int k=0,i,j;
          char str1[MAX];
          char str2[MAX];
          char str3[MAX]={NULL};
          printf("Input string1:\n");
          scanf("%s",str1);
          printf("Input string2:\n");
          scanf("%s",str2);
       
          
       
      for (i=0;i<strlen(str1);)
          for (j=0;j<strlen(str2);)
          {
              if(str1[i]==str2[j])
              {
                  
                  k++;
                  j++;
                  i++;
              }
              else
              {
                  
                  printf("%c",str1[i]);
                  k=0;
                  i++;
                  j=0;
              
              
              }
          }
          if (k=0)
           gets(str1);
          system("pause");
       
                  
      printf ("\nn=%i\n",j);
      printf ("k=%i\n",k);
      printf ("\n");
      return 0;
      }



    я ввожу avtodrom и drom (работает исправно)

    при вводе avtodrom и к примеру rich (выдает ошибку
    Прикреплённая картинка
    Прикреплённая картинка
    )
      Очевидно i становится слишком большим.

      P.S. Как эта галиматья вообще может работать - непонятно.
        Всмысле "галиматья"? без і ведь не обойдешься
          У тебя внутренний цикл инкрементирует i, при этом не содержит никаких проверок на то, что i выходит за строку. И еще, strlen каждый раз проходит по всей строке - ты лучше выполни оба strlen до цикла и сохрани в переменные.

          Добавлено
          И gets, к сожалению, не будет контролировать выход за пределы строки. Лучше используй fgets, которой нужно указывать максимальный размер строки.
            а как i ограничить? пробовал do while - безуспешно
              Так:
              ExpandedWrap disabled
                int li=strlen(str1),lj=strlen(str2);
                for (i=0; i<li; )
                    for (j=0; j<lj && i<li; )
                ...
                Славян, спасибо огромное получилось, только вот возникла ещё проблема

                к примеру я вожу слово "alexspark" и слово "spark" ---> выводит "alex"
                а когда ввожу слово "alexspark" и слово "eprk" ---> выводит "alxspark" ХОТЯ ДОЛЖНО ВЫВЕСТИ "alexspark"
                получается первый символ слова "eprk" который совпадает с символом в "alexspark" удаляется!

                ЧТО ДЕЛАТЬ, СИЖУ ГОЛОВУ ЛОМАЮ ничего не выходит :(
                  Цитата Alex_Spark @
                  ЧТО ДЕЛАТЬ, СИЖУ ГОЛОВУ ЛОМАЮ ничего не выходит
                  Нужно во втором случае (где else) писать не только новую разную=отличившуюся букву, а все предыдущие буквы, так как они ж тоже не подошли! И место, с какого писать, вы знаете! Это k.
                    Славян, извини не понял формулировку, если тебя не затруднит не мог бы скинуть пример кода???
                      Примерно так:
                      ExpandedWrap disabled
                        for(int l=k; l>=0; l--) printf("%c",str1[i-l]);
                        Славик спасибо огромное тебе, получилось)
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0367 ]   [ 17 queries used ]   [ Generated: 2.05.24, 09:55 GMT ]