1. hs
  2. برنامه‌نویسی و طراحی وب
  3. شنبه, 09 فروردين 1393
سلام دوستان
دو تا سوال دارم
1-میخوام برنامه ای بنویسم که از کاربر یه دستور بگیره(کاربر یه جمله تایپ کنه)و از کاراکتر 12 به بعدشو واسم تو یه رشته ذخیره کنه....ممنون میشم کمکم کنین....

2-تو یه برنامه دیگه میخوام از کاراکتر 12 به بعدو تو یه ارایه ذخیره کنه که کد زیرو واسش نوشتم ولی متاسفانه این کد اشکال داره...خروجیش میشه از کاراکتر 12 به بعد+یه سری چرت و پرت+کل ارایه a :
char a[20],b[5];
cin.getline(a,20);
for (int z = 12,n=0; a[z] !=NULL ;++n, ++z)
{
b[n]= a[z];
}
for (int i = 0; b[i] != NULL; i++)
{
cout << b[i];
}



اشکالش چیه؟....
ممنون...
بهترین پاسخ
HoSsEiN.K بهترین پاسخ Pending Moderation
1
رای
پس‌گیری
1-میخوام برنامه ای بنویسم که از کاربر یه دستور بگیره(کاربر یه جمله تایپ کنه)و از کاراکتر 12 به بعدشو واسم تو یه رشته ذخیره کنه....ممنون میشم کمکم کنین....

http://upload7.ir/imgs/2014-03/20124818548484181831.jpg

میدونی چرا آخرش چرتو پرت برات چاپ میکنه ؟ چون وقتی مقادیر رو درون رشته جدید ریختی باید آخرش NULL بذاری که انتهای رشته مشخص شه
همیشه خونه آخر رشته کاراکتر NULL قرار داره
اون چرتو پرتا یه کاراکتر به صورت تصادفی هستن که هنگام ایجاد رشته داخلش ریخته میشه
کلا توی خانواده زبان C هر متغیر هرچی که باشه موقه ایجاد یه مقدار تصادفی توش هست . البته سی شارپ تصادفی نیست مقادر اولیه اش مشخصه

من کد کاملشو برات نوشتم میتونی تست کنی جواب بگیری هرجاشو نفهمیدی بگو تا توضیح بدم
بــرخی آدمها به یــک دلیل از مــسیر زنــدگی مــا می گــذرند:

بـه مــا درسهایی بــیامــوزند کــه اگــر "می مــاندند" هــرگز یــاد نــمی گــرفتیم...
khalil بهترین پاسخ Pending Moderation
0
رای
پس‌گیری
به آرایه ها مقدار اولیه بده چون سی پلاس پلاس اینکار رو نمی کنه و ممکنه توی حافظه قبلا مقادیری وجود داشته باشه که باعث بشه آخر آرایه به '0\' ختم نشه و درست کار نکنه.

char a[20] = {'\0'}, b[5] = {'\0'}


سوال 1 و 2 هم که هر دو یکی هستند.
hs بهترین پاسخ Pending Moderation
0
رای
پس‌گیری
اقا دم شما گرم....
ببین من میخوام از کاربر یه دستوری بگیره بعد از کاراکتر 12 به بعدشو نیاز دارم که توی یه لینک لیست به عنوان هد ازش استفاده کنم....ینی میخوام اون 12 به بعد که اسمشو root میذارم اینجوری ازش استفاده کنم:
head = root ;
حالا اگه من این root رو ارایه ای بگیرم نمیشه خب چون root = root[0] و فقط حرف اولوش میگیره....ولی استرینگی باید جواب بده و سوال من اینه که چطور از 12 به بعد رو تو یه استرینگ ذخیره کنم....
khalil بهترین پاسخ Pending Moderation
0
رای
پس‌گیری
راستش اگه بشه یکمی بشتر توضیح بدین ؟ من متوجه نشدم
khalil بهترین پاسخ Pending Moderation
0
رای
پس‌گیری
اگه منظورتون این هست که از کاراکتر 12 به بعد رو به head کپی کنید می تونید head رو اشاره گر تعریف کنید و به صورت دینامیکی این کار رو انجام بدید.


char *head = new char[strlen(&root[11])];d


strcpy(head, &root[11]);d

در آخر هم هر چند تا head داری باید حافظه رو آزاد کنی



delete p;d


اون حرف دی که می گذارم آخر هر سطر برای بهم نریختن سطر هاست.
HoSsEiN.K بهترین پاسخ Pending Moderation
1
رای
پس‌گیری
مثلا اگه شما یه رشته به طول 40 بگیری و بعد از ورودی مثلا Hi رو وارد کنی بعد از چاپ Hi رو بهت نمایش میده
سوال : رشته ای که من ساختم 40 تا خونه داره hi که دوتاست پس چرا بعدشو نشون نمیده ؟
جواب : چون بعد از Hi یعنی سومین خانه آرایه رشته NULL قرار میگیره و خانه های بعد از NULL اصلا حساب نمیشه
بــرخی آدمها به یــک دلیل از مــسیر زنــدگی مــا می گــذرند:

بـه مــا درسهایی بــیامــوزند کــه اگــر "می مــاندند" هــرگز یــاد نــمی گــرفتیم...
hs بهترین پاسخ Pending Moderation
0
رای
پس‌گیری
اقا خلیل دم شما گرم....اقا حسین دم شمام گرم واقعا خدا خیرتون بده خیلی اعصابمو خورد کرده بود این مسئله....
  • صفحه :
  • 1


هنوز پاسخی به این پست ارسال نشده است.
البته از آنجایی که هنوز در سایت لاگین نکرده‌اید، اجازه‌ی پاسخ دادن به این پست را ندارید.