IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Удалить из строки s1 все вхождения подстроки s2, что неверно в коде? С++
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +



#include <stdio.h>
#include <string>
int main()
{ setlocale( LC_ALL, "Russian" );
printf("Программа исключает из заданной строки S1 все вхождения заданной подстроки S2.\n\n");
char S1[100] ;
char S2[100] ;
printf("Введите S1: ");
gets(S1);
printf("Введите S2: ");
gets(S2);
printf("\nПреобразованная строка: ");
setlocale( LC_ALL, ".866" );
bool k = true;
for (int i=0; S1[i]!='\0'; i++)
{
k = true;
for (int j=0; S2[j]!='\0'; j++)
{
if (S2[j]!= S1[i + j])
{
k = false;
break;
}
}
if(k == true)
{
i += strlen(S2);
}
printf("%c",S1[i]);
}
printf("\n");
return 0;
}


Добавлено через 12 мин.
вводим s1 привет ветер
s2 ве
получается прит тер
это правильно
но если вводим например s1 каккаккак
s2 как
то выводится как,хотя должна вывестись пустая строчка...
не подскажете в чем дело?

Сообщение отредактировано: Dmitry25 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Ночной волк
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской

Репутация: -  1  +


Ошибки две
1.
   printf("%c",a[i]);
в любом случае должна что-то выводить, согласно твоей программе. Вот она и выводит. Включим ее в условие.

2. У тебя a[i+j], а потом еще и инкрементация в цикле. т.е. указывает на один элемент дальше положенного

Вообщем вот
#include <stdio.h>  
#include <string>
int main()
{
setlocale( LC_ALL, "Russian" );
printf("Iskl 2 to 1\n\n");
char a[100] ;
char b[100] ;
printf("String a: ");
gets(a);
printf("String b: ");
gets(b);
printf("\nTotal: ");
setlocale( LC_ALL, ".866" );
bool k = true;
for (int i=0; a[i]!='\0'; i++)
{
k = true;
for (int j=0; b[j]!='\0'; j++) {
if (b[j]!= a[i + j]){
k = false;
printf("%c",a[i]); //Включим вывод в условие
break;
}
}
if(k == true)
{
i += (strlen(b)-1); //Такие меры могут помочь))

}

}
printf("\n");
return 0;
}



--------------------
Не думай о белой обезьяне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.04.2024 21:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name