PDA

View Full Version : شبیه سازی توابع strcat , strcpy در زیر برنامه



milani
شنبه 06 خرداد 1385, 07:39 صبح
من می خواهم توابع strcst و strcpy را شبیه سازی کنم.
این برنامه رو برای حل این مسئله نوشتم و لی با مشکلی عجیب رو برو شدم.
نمی دون چرا خروجی دو تا حلقه for با هم برابر نیستند.
در صورتی که به نطر من باید برابر باشند.

mzjahromi
شنبه 06 خرداد 1385, 07:49 صبح
میشه ورودیها و خروجیهات رو اینجا بنویسی؟

milani
شنبه 06 خرداد 1385, 08:36 صبح
کل برنامه ای تا به حال نوشته ام ر وضیمه این سوال کرده ام.
در داخل برنامه من دو آرایه به صورت زیر تعریف کرده ام:
char s1[]="1";
char p2[255];
حال می خواهم با ااستفاده از دو حلقه for زیر محتویات هر یک از آرایه ها را به صورت تکی چاپ کنم.
for(int i=2;s1[i]!='\0';i++)
cout<<"\n"<<s1[i];

for(int j=0;p2[j]!='\0';j++)
cout<<"\n"<<p2[j];
ولی در هر بار محتویات s1 چاپ می شود.
مشکل از کجاست اگه اینطور باشه 100 سال طول میکشه من این برنامه ها رو تموم کنم.

mzjahromi
شنبه 06 خرداد 1385, 08:51 صبح
دوست عزیز
مشکل دیگه اینجاست که
شما قرار شد ورودیها و خروجیهای برنامه رو بنویسید.
دوم اینکه چرا اندیسها رو از 2 شروع کردید؟
سوم اینکه برنامه تون رو من خوندم برای اینکه بتونم راهنمائیتون کنم نیاز ب اطلاعاتی که گفتم دارم
موفق باشید.

milani
شنبه 06 خرداد 1385, 21:19 عصر
strcat یک تابع آماده از توابع c++ است که در پردازش رشته ها مورد استفاده قرار می گیرد.
char *strcat(char *s1,const char *s2)l و یا char *strcat(char *s1,const char *s2,size_t)l
در حالت اول رشته s2به انتهای رشته دوم اضافه میکند.
در حالت دوم n رشته از کاراکتر s2 به انتهای رشته اول اضافه می شود.

mzjahromi
یک شنبه 07 خرداد 1385, 06:58 صبح
دوست عزیز منظور من اینا نبود.
منظور من این بود که وقتی برنامه رو اجرا کردی و رشته s1 رو خواست بگیره چی بهش دادی؟
و اون چه جوابی داد و ...

milani
یک شنبه 07 خرداد 1385, 19:42 عصر
در برنامه ایی که من ضیمه سوالم کرده ام اگر شروع حلقه ها را از صفر شروع شود با ورود:
مقدار 1234 به متغییر s1 از ورودی داده می شود.
مقدار farhad به متغییر s2 داده می شود.
بعد از هر دریافت از ورودی با دستور cout<<"\n"<<s1 مقدار s1 چاپ می شود وهمان مقدار است که از ورودی دریافت شده است .
بعد از دریافت از ورودی با دستور cout<<"\n"<<s2 چاپ شده و دست همانند وردی است .
ولی بعد از اولین چاپ با چاپ دوباره آن توسط حلقه for به صورت کاراکتر به کاراکتر مقدار 12farhad در ورودی چاپ می شود و با چاپ دوباره مقدار متغیر s2 تغییری در آن داده نمی شود.
مقدار شروع حلقه را به خاطر این منظور از دو قرار داده ام.
آیا روش تعریف متغییر من اشتباه است؟
من روش چاپ متغییر را نیز عین حالت اول کرده و باز هم این خروجی را مشا هده کردم.
چاپ مقادیر متغیر ها با استفاده از حلقه for :
for(int i=0;s1[i]!='\0';i++)
{ cout<<"\n"<<s1[i]; }
cout<<"\n--------------------------------------------------";
for(int j=0;s2[j]!='\0';j++)
{ cout<<"\n"<<s2[j]; }

mzjahromi
یک شنبه 07 خرداد 1385, 20:00 عصر
تعریف متغیر هاتون رو به این شکل تغییر بدید مشکل حل میشه


char s1[20];
char s2[20];