Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2011, 01:16   #1
novak3
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 33
По умолчанию выдает ошибку windows

Написал код для замены одного слова на другое в введенной строке.
Программа пашет исправно, но только если вводишь слово присутствующее во фразе. Если нет, то сама винда выдает ошибку. Подскажите,плз, как это исправить.

Код:
#include <stdio.h>
#include <string.h>

int main()
{int a,b,c,i,d,e1,e2,e3,e4;
char m1[100],m2[100],m3[100],pm1[100];
char*pch,*pch1,*pch2;
printf ("Введите фразу:\n");                  //ввод данных
gets(m1);
printf ("Введите слово которое нужно заменить:\n");
gets(m2);
printf ("Введите слово на которое нужно заменить:\n");
gets(m3);

a=strlen(m1);                     //подсчет знаков
b=strlen(m2);
c=strlen(m3);

strcpy(pm1,m1);                  //присвоение значения m1 массиву pm1
pch=strstr(pm1,m2);             //изменение начала искомого слова на ---(в массиве pm1)
strncpy(pch,"---",3);
pch1 = strtok (pm1,"---");       //присвоение pch1 символов до --- (в массиве pm1)
i=strlen(pch1);                  //подсчет количества символов до --- (в массиве pm1)


if (b==c)                         //№ 1.
{pch2=strstr(m1,m2);              //замена слова
strncpy(pch2,m3,c);
puts(m1);}

if(b>c)                           //№ 2.
{d=b-c;                           //разница между словами
e1=i+b;                           //позиция где фраза после слова
e2=i+b-d;                          //позиция куда передвинуть фразу после слова
e3=a-e1;
e4=a-d;
pch2=strstr(m1,m2);                 //замена слова
strncpy(pch2,m3,c);
memmove(m1+e2,m1+e1,e3);           //перемещение фразы после слова(влево)
memmove(m1+e4,m1+a,d);             //срезание лишнего хвоста фразы
puts(m1);}

if(b<c)                            //№ 3.
{d=c-b;
e1=i+b;                           //позиция где фраза после слова
e2=e1+d;                          //позиция куда передвинуть фразу после слова
e3=a-e1;                         //оставшаяся часть фразы после слова
memmove(m1+e2,m1+e1,e3);          //перемещение фразы(вправо) после слова
pch2=strstr(m1,m2);              //замена слова
strncpy(pch2,m3,c);
puts(m1);}

return 0;
}
novak3 вне форума Ответить с цитированием
Старый 10.05.2011, 02:20   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

А вы хоть где-нибудь проверяете, есть искомое слово или нет?

pch=strstr(pm1,m2);

Насколько я помню, strstr возвращает null, если m2 не была найдена. Вот и проверьте после данной строки pch != null, а уже после этого выполняйте все остальные действия
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фортран выдает ошибку train88 Помощь студентам 1 05.01.2011 18:21
форма выдает ошибку serikov Microsoft Office Excel 4 01.07.2010 23:18
Выдает ошибку( И.А.А. Общие вопросы C/C++ 1 21.05.2010 19:10
выдает ошибку! maksim_serg Microsoft Office Word 3 20.04.2010 04:19
ADOQuery - выдает ошибку kiber0net0 Общие вопросы Delphi 2 02.09.2008 19:49