Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.12.162.179] |
|
Сообщ.
#1
,
|
|
|
Задание:
Даны строки S и S0. Удалить из строки Sпоследнюю подстроку,совпадающую с S0. Если совпадающих подстрок нет, то вывести строку S без изменений. Я написал: #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 (выдает ошибку Прикреплённая картинка
) |
Сообщ.
#2
,
|
|
|
Очевидно i становится слишком большим.
P.S. Как эта галиматья вообще может работать - непонятно. |
Сообщ.
#3
,
|
|
|
Всмысле "галиматья"? без і ведь не обойдешься
|
Сообщ.
#4
,
|
|
|
У тебя внутренний цикл инкрементирует i, при этом не содержит никаких проверок на то, что i выходит за строку. И еще, strlen каждый раз проходит по всей строке - ты лучше выполни оба strlen до цикла и сохрани в переменные.
Добавлено И gets, к сожалению, не будет контролировать выход за пределы строки. Лучше используй fgets, которой нужно указывать максимальный размер строки. |
Сообщ.
#5
,
|
|
|
а как i ограничить? пробовал do while - безуспешно
|
Сообщ.
#6
,
|
|
|
Так:
int li=strlen(str1),lj=strlen(str2); for (i=0; i<li; ) for (j=0; j<lj && i<li; ) ... |
Сообщ.
#7
,
|
|
|
Славян, спасибо огромное получилось, только вот возникла ещё проблема
к примеру я вожу слово "alexspark" и слово "spark" ---> выводит "alex" а когда ввожу слово "alexspark" и слово "eprk" ---> выводит "alxspark" ХОТЯ ДОЛЖНО ВЫВЕСТИ "alexspark" получается первый символ слова "eprk" который совпадает с символом в "alexspark" удаляется! ЧТО ДЕЛАТЬ, СИЖУ ГОЛОВУ ЛОМАЮ ничего не выходит |
Сообщ.
#8
,
|
|
|
Цитата Alex_Spark @ Нужно во втором случае (где else) писать не только новую разную=отличившуюся букву, а все предыдущие буквы, так как они ж тоже не подошли! И место, с какого писать, вы знаете! Это k. ЧТО ДЕЛАТЬ, СИЖУ ГОЛОВУ ЛОМАЮ ничего не выходит |
Сообщ.
#9
,
|
|
|
Славян, извини не понял формулировку, если тебя не затруднит не мог бы скинуть пример кода???
|
Сообщ.
#10
,
|
|
|
Примерно так:
for(int l=k; l>=0; l--) printf("%c",str1[i-l]); |
Сообщ.
#11
,
|
|
|
Славик спасибо огромное тебе, получилось)
|