PDA

View Full Version : سوال: Replace



h_r_sh
یک شنبه 11 مرداد 1388, 13:40 عصر
سلام به همه.
من دارم رو یک ادیتور خیلی ساده کار می کنم.
چطور می تونم عملیات replace رو شبیه سازی کنم؟
یعنی دو رشته رو بگیرم و توی متن اولی رو پیدا پیداش کنم و با دومی جایگزین کنم. مشکلم اینجاست که اگه طول هر دو رشته یکی نباشه جواب نمی ده

tdkhakpur
یک شنبه 11 مرداد 1388, 14:07 عصر
مشکلم اینجاست که اگه طول هر دو رشته یکی نباشه جواب نمی ده
سلام
خوب شما مقایسه را با طول رشته کوچکتر انجام بدید


void Replace(char *src, char *mem, int srclen)
{
for( int i=0; i<strlen(mem) && i<=srclen && srclen<=strlen(mem); i++)
{
if( memcmp(src, mem, srclen)==0){
memcpy(&mem[i], src, srclen);
i += srclen;
}
}
}

دستی کد شده ایراد داشت اصلاح کنید . mem متن شماست و src رشته مورد جستجو و srclen طول رشته هست.

h_r_sh
یک شنبه 11 مرداد 1388, 14:16 عصر
نه منظورم اینه که اگه رشته ای که قراره جایگزین رشته ای در متن بشه و طولش بیشتر از اون باشه جواب نمی ده. من از این کد استفاده کردم



char s1[101];
char s2[21],s3[21];
cin.get(s1,100);
cin.ignore();
cin.get(s2,20);
cin.ignore();
cin.get(s3,20);
int c2=0;
for(int i=0;i<strlen(s1);i++){
int cnt=0;
for(int j=0;j<strlen(s2);j++)
if(s1[i+j]==s2[j])
cnt++;
if(cnt==strlen(s2)){
for(int j=0;j<strlen(s3);j++)
s1[i+j]=s3[j];
i+=cnt-1;
}
}


که s1 متن اصلی s2 رشته ای که باید پیدا بشه و s3 باید جایگزین s2 بشه. اگه طول s2 و s3 مساوی نباشه خراب می شه

tdkhakpur
یک شنبه 11 مرداد 1388, 15:10 عصر
سلام
برنامه شما یه کمی مبهمه تابع زیر را مطالع کنید.


void Replace(char *src1, char *src2, char *mem)
{
char *ptr;
int maxsrclen, c=0;
maxsrclen = strlen(src1)<strlen(src2) ? strlen(src2) : strlen(src1)
ptr = new char[strlen(mem)+maxsrclen];
for( int i=0; i<strlen(mem) && strlen(src1)<=strlen(mem); i++)
{
if( memcmp(src1, mem, strlen(src1))==0){
memcpy(&ptr[c], src2, strlen(src2));
c+= strlen(src2);
i += strlen(src1);
}else ptr[c++] = mem[i];
}
strcpy( mem, ptr);
delete [] ptr;
}

ایراد داشت خودتان رفعش کنید