#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;
}
#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;
}
Ошибки две
1.
printf("%c",a[i]);в любом случае должна что-то выводить, согласно твоей программе. Вот она и выводит. Включим ее в условие.
#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;
}
Спасибо,работает!