PDA

View Full Version : سوال: برعکس کردن کلمات در یک جمله!!!



m.babaei
پنج شنبه 26 دی 1387, 23:23 عصر
چطورمی شود برنامه ایی نوشت که باخواندن یک خط اطلاعات جای کلمات را معکوس کند.مثلا با نوشتن
In the name of god
خروجی : god of name the In
بدهد من این کار رو با یک آرایه از رشته انجام میدم اما شرط توقف حلقه while را نمی دانم با for هم نمیشه انجام داد زیرا برای دستورfor باید مقدار پایانی مشخص باشد.لطفا مرا راهنمایی کنید!
همچنین چه طور میشود برنامه ایی نوشت که تمام حالات ممکن برای ساختن یک عدد پنج رقمی از اعداد 0و2و5و8و1 را درخروجی نشان دهد.ممنون میشوم!

Saeed_m_Farid
جمعه 27 دی 1387, 02:56 صبح
اما شرط توقف حلقه while را نمی دانم با for هم نمیشه انجام داد زیرا برای دستورfor باید مقدار پایانی مشخص باشدتو سي for‌ و while از لحاظ شرط هيچ فرقي با هم ندارن، يعني شما ميتونين هر كدوم رو هرجايي به جاي ديگري بكار ببريد، در ضمن شما شرط انتهاي حلقه تون رو بايد رسيدن به كاراكتر '0\' بذاريد. يعني همون موقعي كه دارين كاراكتر Space و Tab رو چك ميكنيد كه كلمات رو تفكيك كنيد اگه به كاراكتر NULL رسيدين بايد از حلقه بياين بيرون.


چه طور میشود برنامه ایی نوشت که تمام حالات ممکن برای ساختن یک عدد پنج رقمی از اعداد 0و2و5و8و1 را درخروجی نشان دهدبا يه حلقه for‌ يا while! اگه راهنمايي بيشتر ميخواين بيزحمت كدي كه نوشتين بذارين ...

saeed-kh
سه شنبه 01 بهمن 1387, 02:59 صبح
باید از توابع بازگشتی واسه حلتهای مختلف یک عدد 5رقمی استفاده کنی دوست عزیز
اگه به کتاب ساختمان داده دسترسی داری
توی کتاب من(ساختمان داده با C)ترجمه علیخانزاده صفحه 14
این مثال تولید جاگشتهای یک مجموعه است میتونه کمت کنه.

shask00l
سه شنبه 01 بهمن 1387, 07:05 صبح
جواب سوال اول :

آرایه رو از آخر به اول بخون . هر جا که به یک کلمه رسیدی کلمه رو توی رشته جدید کپی کن و یم space اضافه کن . اگه میخای فاصله ها هم دقیقا همونجوری باشه باید توی حلقه اصلی که آرایه رو از آخر به اول میخونه به جای هر space که خونده میشه یک space توی آرایه دوم اضافه کنی ... ساده ترین روشش همینه . اگر توی بخش تشخیص کلمه مشکل داری بگو تا توضیح بدم .

Salar Ashgi
چهارشنبه 02 بهمن 1387, 20:58 عصر
سلام به شما دوست عزیز !!! برای این کار روشهای متعددی هست ، تابع بازگشتی ،

ساختمان داده پشته (Stack ) و ...

ولی خوب ساده ترینش اینه که رشته رو بخونی و از آخر به اول چاپ کنی ، می دونیم که

رشته ها به یک کاراکتر تهی یا null ختم میشوند و این میتونه نکته خوبی برای تعیین شرط

پایان حلقه باشه !!

کد مورد نظر :


#include <iostream>
#include <conio>
int main(){
char a[20];
int k=0;
cout<<"Enter a Sentence :\n";
cin.getline(a,20);
for(int i=0;a[i]!=NULL;i++)
k++;
for(int i=k-1;i>=0;i--)
cout<<a[i];
cout<<endl;
getch();
}

موفق و پیروز باشید !!!

obscure
پنج شنبه 03 بهمن 1387, 14:05 عصر
این کدی هست که من نوشتم و درست هم کار میکنه امید وارم بدردتون بخوره..
فقط یه نکته اونم اینکه وقتی شرط حلقه رو NULL میزارم درست کار نمیکنه واسه همین بجاش
مجبور شدم از ' ' (یک اسپیس) استفاده کنم...

#include <iostream.h>
#include <conio.h>
#include <string.h>
int main()
{
char a[20];
char b[21]={NULL};
int k=1;
cout<<"Enter a Sentence :\n";
cin.getline(a,20);
for(int i=strlen(a)-1;i>=0;i--)
{
b[k] = a[i];
k++;
}
b[0]=' ';
for(i=1;i<=strlen(b);i++)
{
if(b[i] == ' ')
{
for(int j=i-1;b[j]!=' ';j--)
{
cout<<b[j];
}
cout<<' ';
}
else if(b[i] == '\0')
{
for(int j=i-1;b[j]!=' ';j--)
{
cout<<b[j];
}
}
}
getch();
return 0;
}

Salar Ashgi
شنبه 05 بهمن 1387, 18:02 عصر
سلام ،
وقتی شرط حلقه رو NULL میزارم درست کار نمیکنه

اگه درست استفاده کنی ، کار میکنه !!!!

obscure
شنبه 05 بهمن 1387, 19:10 عصر
سلام ،

اگه درست استفاده کنی ، کار میکنه !!!!
این به نظر شما غلطه؟

for(int j=i-1;b[j]!=NULL;j--)

من هم طبق مثال حلقه for شما امتحان کردم هم راههای دیگه رو ولی با NULL اصلا خروجی نمیده...
ممنون میشم اگه راه درستشو برام مثال بزنید.

Salar Ashgi
شنبه 05 بهمن 1387, 21:05 عصر
سلام ،
این به نظر شما غلطه؟

for(int j=i-1;b[j]!=NULL;j--)

من هم طبق مثال حلقه for شما امتحان کردم هم راههای دیگه رو ولی با NULL اصلا خروجی نمیده...


بله ، این کد درست نیست ، به این دلیل که شما روی رشته از چپ به راست یا به عبارتی

از اول به آخر نمیری ، چون در آن صورت باید بجای --j ، مینوشتید ++j ، به همین دلیل

هیچ وقت حلقه به کاراکتر NULL نمی رسه ، منظور من از استفاده درست همین بود !!!

همانطور که گفتم این دستور کاملا درسته و اگه کتاب دیتل رو هم نگاه کنی ، همین دستور

رو میبینی !!! موفق و پیروز باشید !!!

Arash.Net
یک شنبه 06 بهمن 1387, 03:11 صبح
من هر دو کد salar_cpp_cs (http://barnamenevis.org/forum/member.php?u=70109) جان و obscure (http://barnamenevis.org/forum/member.php?u=77507) جان رو نگاه کردم

در کد salar_cpp_cs (http://barnamenevis.org/forum/member.php?u=70109) خان کل رشته ها بر عکس نوشته میشن در کد شما h. ها رو تعریف نکرده بودین خطا میداد

ولی در کد obscure (http://barnamenevis.org/forum/member.php?u=77507) خان فقط کلمه ها بر عکس میشن در ضمن در کد شما من به یه خطا برخورد کردم اونم اولش متغیر i رو تعریف نکردین

ولی تو دو تا کد واسه Null ،یه دونه warning داشت

با تشکر :قلب:

obscure
یک شنبه 06 بهمن 1387, 05:20 صبح
سلام ،

بله ، این کد درست نیست ، به این دلیل که شما روی رشته از چپ به راست یا به عبارتی

از اول به آخر نمیری ، چون در آن صورت باید بجای --j ، مینوشتید ++j ، به همین دلیل

هیچ وقت حلقه به کاراکتر NULL نمی رسه ، منظور من از استفاده درست همین بود !!!

همانطور که گفتم این دستور کاملا درسته و اگه کتاب دیتل رو هم نگاه کنی ، همین دستور

رو میبینی !!! موفق و پیروز باشید !!!

سلام..من چون رشته رو از آخر به اول توی یه رشته دیگه ذخیره کرده بودم،مجبور بودم که از آخر به اول پیمایش کنم(من چون عجله ای کد رو نوشتم اینجوری شد،وگرنه از چپ براست هم میشه)...ولی من منظور شما رو نمی فهمم..وقتی یه رشته توش NULL وجود داشته باشه دیگه فرقی نمی کنه چطوری پیمایش کنیم.چه از اول به آخر بریم و چه از آخر به اول..بالاخره باید از NULL عبور کنه...
شما این دوتا کد رو ببینید...در هیچ کدوم شرطی که شما میگی کار نمیکنه..!(پیمایش هم از اول)

#include<conio.h>
#include<iostream.h>
void main()
{
char a[15];
cin.get(a,15);
for(int i=0;a[i]!=NULL;i++)
cout<<a[i];
getch();
}

#include<conio.h>
#include<iostream.h>
void main()
{
char a[15];
int i=0;
cin.get(a,15);
do{
cout<<a[i];
i++;
}while(a[i]!=NULL);
getch();
}

می دونم شاید اشتباه من مبتدی باشه...ولی..در هر صورت ممنون.

abeeeeeb2
شنبه 26 شهریور 1390, 11:44 صبح
سلام دوستان.. من این مشکل رو دارم که متن جمله رو می خوام وارونه کنم! ولی نفهمیدم از کدهای شما چطور می تونم استفاده کنم... می خوام این جمله

های رشته سایر به نسبت کمی نسبتا دانش عمق دارای اکنون آنکه وجود با هیدروفرمینگ تکنولوژی

بصورت

تکنولوژی هیدروفرمینگ با وجود آنکه اکنون دارای عمق دانش نسبتا کمی نسبت به سایر رشته های...

ممنون می شم هرچه زودتر کمکم کنید