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

> Внимание!

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

 
 Ответить  Открыть новую тему 
> Удалить из строки s1 все вхождения подстроки s2, что неверно в коде? С++
Dmitry25
сообщение 4.02.2009 20:48
Сообщение #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 - 4.02.2009 20:54
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.02.2009 21:38
Сообщение #2


Гость






Цитата
что неверно в коде?
Ну, наверное, то, что из строки ничего не удаляется, и в результате строка S1 остается ровно такой же, какой и была сразу после ввода, ты ж просто печатаешь посимвольно то, что тебя устраивает...

Ну, и коли уж речь о файле <string>, то почему бы не работать с std::string и не решить эту задачу в две строки (исключая ввод данных):
#include <iostream>
#include <string>

int main() {
std::string s1, s2;
std::cout << "Введите S1: "; getline(std::cin, s1);
std::cout << "Введите S2: "; getline(std::cin, s2);
size_t found;

while((found = s1.find(s2)) != std::string::npos)
s1.erase(found, s2.length());

std::cout << s1 << "\n";
return 0;
}
 К началу страницы 
+ Ответить 
Dmitry25
сообщение 4.02.2009 21:56
Сообщение #3





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

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


Цитата
Ну, наверное, то, что из строки ничего не удаляется, и в результате строка S1 остается ровно такой же, какой и была сразу после ввода, ты ж просто печатаешь посимвольно то, что тебя устраивает...

я так и задумал выполнить ее, просто не понимаю,почему она работает неправильно...а в Вашем коде я пока не могу разобраться,т.к. недавно начал заниматься программированием
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
ammaximus
сообщение 4.02.2009 22:56
Сообщение #4


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

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 
Dmitry25
сообщение 5.02.2009 11:26
Сообщение #5





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

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


Спасибо,работает! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 20.06.2025 14:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"