удалить из строки все вхождения буквосочетания из подстроки
Написал код,который должен удалять из строки все вхождения конкретного буквосочетания,почему-то удаляет только первое,а дальше прекращает работу с ошибкой.
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char S[] = "xyz 1 xyz 2 xyz 3";
char str[]= "xyz";
char *p;
p = strstr(S, str);
while (p)
{
strcpy(p, p + strlen(str));
break;
}
cout << S << endl;
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
char S[] = "xyz 1 xyz 2 xyz 3";
char str[]= "xyz";
for(char *p = strstr(S,str); p; p = strstr(S,str))
memmove(p,p+strlen(str),strlen(p+strlen(str))+1);
cout << S << endl;
При перекрывающихся областях памяти надо использовать memmove().