ورود

View Full Version : سوالی در مورد رشته ها



mojtaba_cpp
جمعه 08 تیر 1386, 21:36 عصر
یکی از تمرینهای دایتل در قسمت اشاره گرها و کار با رشته ها باید حرف اول هر کلمه در آخر کلمه قرار بگیره . اگه می شه راهنمایی کنید . من خودم به این کد رسیدم ولی درست کار نمی کنه ...



void printlatinword(char *word)
{
char hold2[10];
strcpy(hold2, word);
strncat(&hold2[1], word , 1);
cout << hold2 << endl;
}

alireza643
شنبه 09 تیر 1386, 07:36 صبح
نتیجه کار شما چی میشه؟
نیازی نبود کل کلمه رو تو یه ارایه کپی کنید بعد یکی از عناصر آرایه رو به انتهای کلمه اضافه کنید. کافی بود حرف اول word رو تو یه کاراکتر میریختی.
در ضمن اگر به جای حرف اول، حرف دوم به آخر کلمه انتقال داده میشه به این خاطره که برای کار با آرایه ها باید از اندیس 0 شروع کنید که شما از اندیس 1 شروع کردید.
در استفاده از تابع strncat هم جای ورودی ها رو اشتباه دادید. اول متغییری که قراره کاراکتر به اون اضافه بشه و بعد کاراکتری که باید به متغیر اضافه بشه باید قرار بگیرن.

mojtaba_cpp
شنبه 09 تیر 1386, 10:48 صبح
ممنون


نیازی نبود کل کلمه رو تو یه ارایه کپی کنید بعد یکی از عناصر آرایه رو به انتهای کلمه اضافه کنید. کافی بود حرف اول word رو تو یه کاراکتر میریختی.

من می خواستم که word تغییر نکنه چون برنامه درست کار نمی کرد ...



در ضمن اگر به جای حرف اول، حرف دوم به آخر کلمه انتقال داده میشه به این خاطره که برای کار با آرایه ها باید از اندیس 0 شروع کنید که شما از اندیس 1 شروع کردید.


چنین اتفاقی نمی افتاد ! کل کلمه نوشته می شد و بعد حرف اول اضافه می شد یعنی اگه حرف اول حذف می شد کار درست بود خوب من به عنصر دوم اشاره کردم تا حرف اول حذف بشه و تمام اشکال هم تو همین جا بود و این قسمت بود که برام عجیب بود چون حرف اول رو حذف نمی کرد . تو strncat فرق نمی کنه به کدوم عنصر ارجا بدی همه نتایج یکی می شه ...
فکر کنم به صورت کلی نباید در توابع رشته ها به این صورت آرگومان اول رو بنویسیم ...
این کد کارم رو راه انداخت :



void printlatinword(char *word)
{
char hold2[10];
strcpy(hold2, &word[1]);
strncat(hold2, word , 1);
cout << hold2 << endl;
}

alireza643
یک شنبه 10 تیر 1386, 07:58 صبح
من این برنامه رو نوشتم:


int main()
{
char* ch1 = new char;
char ch2;
ch1 = "alireza";
ch2 = ch1[0];
for (int i = 0; i <= 5; i++)
ch1[i] = ch1[i + 1];
ch1[6] = ch2;
cout<<ch1;
getch();
return 0;
}

و در خروجی مقدار lirezaa چاپ شد اگر این هموم چیزیه که شما مخواهید کافیه به جای for از do استفاده کنید تا رشته با هر طولی که خواستید بتونید بهش بدید. و ورودی رو هم به جای این که داخل تابع تعریف کنید به عنوان یک پارامتر به تابع پاس کنید.

mojtaba_cpp
یک شنبه 10 تیر 1386, 15:14 عصر
ممنون . ولی مسیله برای آشنایی با توابع رشته هاست و باید از اونها استفاده کنید ...

emad_67
یک شنبه 10 تیر 1386, 17:19 عصر
الان این برنامه ای که خودت نوشتی مگه مشکلی داره؟


void printlatinword(char *word)
{
char hold2[10];
strcpy(hold2, &word[1]);
strncat(hold2, word , 1);
cout << hold2 << endl;
}

mojtaba_cpp
یک شنبه 10 تیر 1386, 17:22 عصر
من هم گفتم که این کد کارم رو راه انداخت ( مشکلم حل شد ) ...
گفتم شاید آقا علیرضا می خواد به روش دیگه ای بگه ...