PDA

Просмотр полной версии : Строки_в_С++



pymba
07.04.2009, 16:39
помогите_решить,plz…
Дана_подстрока_из_нескольк х_символов._Удалить_из строки_все_вхождения_задан ой_подстроки_и_подсчита ть_количество_удалений.

pymba
10.05.2009, 12:46
посмотрите,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();
}

Albor
10.05.2009, 14:19
int strstr_cnt(const char * pTarget, const char * pFind)
{
int cnt(0);
unsigned len(strlen(pFind));
char *p=strstr(pTarget,pFind);
while(p)
{
++cnt;
char * pch=p+len;
while(*pch!=0) *p++=*pch++;//удаление подстроки
*p=0;
p=strstr(pTarget,pFind);
}
return cnt;
}Функция модифицирует исходный массив и возвращает количество удалений подстрок.

pymba
11.05.2009, 12:57
а как удалить подстроку?

Albor
12.05.2009, 07:25
а как удалить подстроку?
После отработки моей функции все вхождения подстроки будут удалены:

Функция модифицирует исходный массивто есть массив, переданный в первом параметре.
PTarget-это указатель на массив в котором ищем и удаляем, pFind - указатель на подстроку которую ищем. Используется примерно так:


void main(void)
{
char source[100]="asdsdffdsasdf";
char find[100]="asd";

cout<<source<<" "<<strstr_cnt(source,find)<<endl;
}
Я предполагал, что вы разберётесь. В листинге функции выделил строки, которые удаляют подстроку, копируя часть исходного массива от конца найденной подстроки в начало найденного. Если есть необходимость, то выделите эти строки в отдельную функцию.