помогите_решить,plz…
Дана_подстрока_из_нескольких_символов._Удалить_из строки_все_вхождения_заданной_подстроки_и_подсчита ть_количество_удалений.
Строки_в_С++
посмотрите,plz. помогите исправить
Код: Выделить всё
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
char *strstr_rem(char *string,char *substring)
{
int i,j,k,l=0;
for(i=0;string [i]&&(l==0);i++)
for(j=i,k=0;string[j]==substring[k];j++,k++)
if(!substring[k+1])
l=i;
if(l!=0)
{
for(k=0;substring[k];k++)
for(j=l,i=l+k;string[i];j++,i++)
string[j]=string[i];
string[i]=NULL;
}
cout<<string;
}
char *strstr_cnt(const char *string, const char *substring)
{
int i,j,k,c=0;
for(i=0;string[i];i++)
for(j=i,k=0;string[j]==substring[k];j++,k++)
if(!substring [k+1])
c++;
cout<<c;
}
void main()
{
clrscr();
char string[20],substring[20];
cout<<"Vvedite stroky"<<endl;
cin.getline(string,20);
cout<<"Vvedite podstroky"<<endl;
cin.getline(substring,20);
strstr_rem(string,substring);
cout<<endl;
strstr_cnt(string,substring);
getch();
}
Код: Выделить всё
int strstr_cnt(const char * pTarget, const char * pFind)
{
int cnt(0);
unsigned len(strlen(pFind));
char *p=strstr(pTarget,pFind);
while(p)
{
++cnt;
[B]char * pch=p+len;
while(*pch!=0) *p++=*pch++;//удаление подстроки
*p=0;[/B]
p=strstr(pTarget,pFind);
}
return cnt;
}
После отработки моей функции все вхождения подстроки будут удалены:pymba писал(а):а как удалить подстроку?
то есть массив, переданный в первом параметре.Функция модифицирует исходный массив
PTarget-это указатель на массив в котором ищем и удаляем, pFind - указатель на подстроку которую ищем. Используется примерно так:
Код: Выделить всё
void main(void)
{
char source[100]="asdsdffdsasdf";
char find[100]="asd";
cout<<source<<" "<<strstr_cnt(source,find)<<endl;
}