PDA

View Full Version : درخواست كد برنامه درخواستي



salehvasaleh
سه شنبه 06 مرداد 1388, 00:00 صبح
دوستان مي خوام با سي پلاس پلاس برنامه اي بنويسم كه با گرفتن يك متن طولاني فراواني حروف رو مشخص كنه يعني مشخص كنه كه حرف a و b و .... توي متن مورد نظر چند بار تكرار شدن كسي مي تونه اين برنامه رو بنويسه؟همين كارو با سي پلاس پلاس براي متنهاي فارسي چطوري مي شه انجام داد؟

afi_program
سه شنبه 06 مرداد 1388, 00:39 صبح
سلام ،دوست عزیز با سی پلاس پلاس آشنایی داری؟
اگه داری یه راه ساده اینه که متن را کاراکتر به کاراکتر بخونی و با کنترل شرطی (بهتر switch case باشه)می تونی بشمری
اگه هنوز سوالی هست در خدمتم ولی وقت نوشتنش را فکر نکنم داشته باشم

clover
سه شنبه 06 مرداد 1388, 12:26 عصر
همینطور می تونی از آرایه ها یا اشاره گرها و توابع کار با رشته استفاده کنی . مثلا یه آرایه با طول 100 تعریف کنی :

char word[100] = {0};
و بعد در ساده ترین حالت با استفاده از عملگر استخراج از جریان ، از ورودی رشته مورد نظر را بگیری و در آرایه قرار بدی :

cin>>word;
این دستور کاراکتر ها را یکی یکی از ورودی می خونه تا زمانی که به یه کاراکتر فاصله ، جدول بندی یا خط جدید برسه که این به نوعی عیب محسوب میشه چون ممکنه رشته ورودی ما یه جمله باشه که از چند تا کلمه درست شده اما فقط اولین کلمه در آرایه قرار می گیره . همینطور اگه طول رشته از طول آرایه بیشتر بشه داده های ورودی به صورت غیر مجاز روی حافظه ی بعد از آرایه نوشته میشن که باعث کرش برنامه یا هنگ کردن سیستم میشه .
برای ایراد دوم می تونید از دستکاری کننده جریان setw استفاده کنید (هدر فایل iomanip.h فراموش نشه ! )به شکل زیر :

cin>>setw(100)>>word;

من بهت تابع cin.getline را پیشنهاد می کنم .
cin.getline :
این تابع سه آرگومان می گیرد : یک آرایه نویسه که خط خوانده شده در آن ذخیره خواهد شد . یک عدد صحیح به عنوان طول و یک نویسه حائل . مثلا قطعه کد زیر یک خط را از ورودی به آرایه word می خواند :

cin.getline(word, 100, '\n');
این تابع هنگامی خواندن نویسه را متوقف می کند که به نویسه حائل برخورد کند یا نشانه انتهای فایل وارد شود و یا تعداد نویسه های خوانده شده تا به حال از طول مشخص شده در آرگومان دوم ، یکی کمتر شود (آخرین کاراکتر برای کاراکتر پایانی پوچ رزرو می شود ) .

بعد از وارد کردن رشته کافیه با یه حلقه for متن رو کاراکتر به کاراکتر (هر کاراکتر در یک خانه آرایه تا رسیدن به نویسه پوچ '0\' ) بخونی و تو یه ساختار switch/case با کاراکتر مورد نظرت مقایسه کنی و شمارنده اون حرفو یکی اضافه کنی .( راهنمایی اینکه می تونی یه آرایه برای شمارنده های حروف تعریف کنی و با کدهای اسکی حروف برای اندیس های آرایه ، خونه مورد نظر رو یکی افزایش بدی )

نوشتن این توضیحات بیشتر از نوشتن متن برنامه وقت میگیره ، اما متن برنامه رو نمی نویسم چون می دونم کمکی بهت نمی کنه . اگه باز هم مشکلی بود خوشحال میشم کمک کنم .
موفق باشید .

tdkhakpur
چهارشنبه 07 مرداد 1388, 21:32 عصر
سلام
این برنامه پایه برنامه شما میتواند باشد.


#include <iostream.h>
int WordCount( char *src, char *mem)
{
int srclen, memlen, c=0, find=0;
srclen = strlen(src);
memlen = strlen(mem);
while( (memlen-c)>=srclen )
if( memcmp(src, &mem[c], srclen) ==0 ){
c += srclen;
find ++;
}
else
c++;
return find;
}
int main()
{
int c;
c = WordCount( "o", "how are you.");
cout << c;
return 0;
}

salehvasaleh
پنج شنبه 08 مرداد 1388, 16:36 عصر
آيا براي اينكه بشه همين كارو براي مشخص كردن فراواني حروف در يك متن فارسي تعيين كرد هم راهي وجود داره؟

tdkhakpur
جمعه 09 مرداد 1388, 14:21 عصر
آيا براي اينكه بشه همين كارو براي مشخص كردن فراواني حروف در يك متن فارسي تعيين كرد هم راهي وجود داره؟

فرقی نداره رشته - رشته است.

salehvasaleh
پنج شنبه 15 مرداد 1388, 22:04 عصر
از بين دوستان كسي مي تونه برنامه كامل شده رو براي من آماده كنه؟ خيلي ضروريه .