ايران ويج

نسخه‌ی کامل: جستجوی یک کلمه در متن
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2 3
سلام من می خوام برنامه ای به زبان C++ بنویسم که اول یک متن دریافت کند و بعد یه کلمه و برسی کنه که آیا اون کلمه در متن و جود داشته یا نه و اگر وجود داشته چند بار بوده؟
با سلام و احترام خدمت دوست گرامی
بله می توانی این کار را به کمک جستجوی دودویی و ... سایر جستجو ها انجام بدهی
و آنها را در درون حلقه بگذاری و با استفاده از یک متغیر شمارشی متن های تکرار شونده را شمارش بدهید.
موفق باشید.
سلام
توی دانشگاه به ما جستجوی دودویی و خطی یاد ندادن و نباید هم توی برنامم از چیز هایی که یاد ندادن استفاده کنم.
راه دیگه ای نیست؟
چرا هست متن رو بریز تو یه ارایه و با استفاده از یه حلقه تو ارایه بگرد دنبال متنت هر سری به اندازه تعداد کاراکترهای کلمه ات از ارایه رو بگیر و مقایسه کن
لطفا یخورده مبتدیانه تر توضیح بدید آخه من تازه C++ رو شروع کردم.
سلام

من این برنامرو برات نوشتم شاید دستوراتشو نخونده باشین و مجاز به استفاده نباشین...ولی فکرمیکنم این کوتاهترین برنامه برای سوال شما باشه...سعی میکنم دستوراتشو توضیح بدم..
کد php:
char str1[ ] = "this is a test.there is ... .";
char str2[ ] ="is";

char tokenptr;
int n=0;

tokenptr=strtok(str1," ");
while(
tokenptr!=NULL){
       if(
strcmp(str1,str2)==0))            
             
n++;                                             
       
tokenptr=strtok(NULL," ");            
}

cout<<"there are"<<n<<str2<<"in this string."

strcmp(s1,s2)
دستوریه برای مقایسه دو رشته.اگر دورشته باهم مساوی بودند مقدار صفر را بر میگرداند.اگر s1 کوچکتر بودمقداری کوچکتر از صفر برمیگرداند(و اگر بزرگتر بود بزرگتتر از صفر)

strtok(s1,const char * s2)
رشته ی s1 را به قسمتهایی تقسیم میکند...مثل کلمات موجود در یک جمله... s2 معلوم میکند که رشته ی s1تا چه قسمتی جدا شود...(مثلا در اینجا که blankگذاشتم باعث میشه که کلمه های جمله جدا بشن)
در فراخوانی های بعدی این تابع اگر بخواهیم از ادامه ی آن جداسازی را انجام دهد باید به جای آرگومان اول NULL بنویسیم.
اگه میخواین با دستورات ساده تر باشه بگین تا بنویسم...
توی این برنامه، متن و کلمه ی مورد جستجو را در ابتدای برنامه مشخص کردم...ولی میتونین با دستور cin.getline هر دوتا رشته را از کاربر دریافت کنین...
(۲۳-آذر-۱۳۸۷, ۲۰:۲۷:۴۳)mahbooob نوشته است: [ -> ]اگه میخواین با دستورات ساده تر باشه بگین تا بنویسم...
توی این برنامه، متن و کلمه ی مورد جستجو را در ابتدای برنامه مشخص کردم...ولی میتونین با دستور cin.getline هر دوتا رشته را از کاربر دریافت کنین...
بله راستش خیلی متوجه نشدم که چی شد
مثلا این خط char * tokenptr; یا tokenptr=strtok(NULL," "); رو تا حالا نداشتیم

با دستور cin.getline یا<< cin ؟
آهان..خب چیز مهمی نیست...
اینم یکی از روشهای تعریف آرایه است..یعنی ایندو باهم معادلن:
char tokenptr[] , char *tokenptr

اون یکیم که توتوضیحاتش گفتتم..ببین مثلااگر str1باشه this is a test.....
وقتی مینویسیم tokenptr=strtok(str1," ")
یعنی از ابتدای str1 یک قسمتی را جدا کن تا جایی که به blank برسه و اونو بریز توی آرایه ی tokenptr..
پس در اینجا "this" داخل tokenptrذخیره شده.
اگر بعد از این هم همین دستتور را دوباره بنویسیم دائما همین this جدا میشود...پس همانطور که در توضیحات دستتورش گفتم باید برای اینکه از قسمت ادامه ی آن کلمه را جدا کنیم از دستور tokenptr=strtok(NULL," "); استفاده کنیم.که در اینصورت به ترتیب کلمه های is بعد a بعدtest و به همین ترتیب...جدا و مقایسه میشوند......

انشا... فردا یه برنامه ی دیگه میذارم که بادستورات ساده تر باشه..
(۲۴-آذر-۱۳۸۷, ۰۲:۳۲:۲۵)mahbooob نوشته است: [ -> ]آهان..خب چیز مهمی نیست...
اینم یکی از روشهای تعریف آرایه است..یعنی ایندو باهم معادلن:
char tokenptr[]: , char *tokenptr;

انشا... فردا یه برنامه ی دیگه میذارم که بادستورات ساده تر باشه..
ما اینجوری char tokenptr[] مینویسیمHappy
دستت درد نکنه پس منتظر برنامه جدید هستم Clap
(۲۴-آذر-۱۳۸۷, ۱۳:۴۲:۵۷)mohsen_f نوشته است: [ -> ]ما اینجوری char tokenptr[] مینویسیمHappy

دلیلش اینه که هنوز درستون به رشته ها و اشاره گر هانرسیده...Laugh
صفحه‌ها: 1 2 3