نقل قول نوشته شده توسط saeid6994 مشاهده تاپیک
سلام
برنامه اي كه يك رشته و 2 كلمه از ورودي بگيرد و در رشته كلمه دوم را جايگزين كلمه اول كند.

من بر نامه رو بصورت زير نوشتم كه نقص داره اگه راهنمايي كنيد كاملش كنم ممنون ميشم.

#include<iostream.h>
#include<conio.h>
#include<string.h>
main(){
char s[100];
char sh1[20];
char sh2[20];
int k,l,o,j=0,z,n=0,w ;
char m[20];
cin.get(s,99);
cout<<"s="<<s ;
cout<<endl;
cin>>sh1;
cin>>sh2;
k=strlen(sh1);
l=strlen(sh2);
o=l-k;
cout<<"k="<<k<<endl<<"l="<<l<<endl<<"o="<<o<<endl;


for (int i=0;s[i];i++)
if(s[i]==sh1[0]){
z=i;
w=i;

j=0;
for(int a=i;a<=i+k-1;a++){
m[j]=s[a];
j++;
}

if(strcmp(sh1,m)==0){
for(;s[a];a++){
s[w+o]=s[w];
w++;}
for(;z<=i+l;z++){
s[z]=sh2[n];
n++;
}
}
}
cout<<"sjadid="<<s;
getch();
return 0;
}
سلام دوست عزیز.
اولین مشکل شما اینه که در رشته هایی که می سازید، مقدار NULL که نشاندهنده آخر رشته هست رو کپی نمی کنید. در این حالت رشته شما از نظر طول دچار اشکال می شه و شما نمی تونید این رشته رو با رشته های دیگه مقایسه کنید.
مشکل دوم هم اینه که برنامه شما به اولین کارکتر مشترک که می رسه به اندازه طول رشته اول کپی می کنه و بعد مقایسه می کنه. اما اگه این رشته با رشته اول مساوی نباشه دریگه رشته های دیگه رو چک نمی کنه.
مشکل NULL رو که حل کنی، مشکلات دیگه خودشون رو نشون می دن. یه دسترسی غیر مجاز به حافظه هم داری که بعد از حل NULL خودشو نشون می ده.
این ها رو اصلاح کن، اگر باز هم جایی مشکل داشتی بگو.
یا علی!