امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 3
  • 1
  • 2
  • 3
  • 4
  • 5
پیدا کردن کلمه در یک متن
نویسنده پیام
matha.a آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: دى ۱۳۹۵

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
پیدا کردن کلمه در یک متن
سلام من یه برنامه میخواستم که یه متن رو کاربر بده به برنامه وبرنامه یه کلمه رو دراون پیدا کنه و موقعیت اون کلمه(درچندمین جمله؟چندمین خط؟و چندمین کلمه؟)رو نشون بده
و بعد از اون یه کلمه ی دیگه رو ک بازم اونو کاربر میده بهش،جایگذین کلمه ی سوال قبل کنه
واقعا نیاز به کمک دارم>_<
۲۴-دى-۱۳۹۵, ۱۹:۳۵:۰۸
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #2
RE: پیدا کردن کلمه در یک متن
سلام

کدی که نوشتید رو بزارید رو بفرمایید در چه قسمتی مشکل دارید؛ کمک میشه


باید با توایع رشته ای کار کنید؛ ساده ترین راهی که میتونم پیشنهاد بکنم که درگیر موارد پیچیده نشید اینه خط به خط متن رو بخونید و توی هر خط دنبال متن بگردید

تا دلتون هم بخواد تابع واسه اینکار هست؛ مثلا:
http://www.cplusplus.com/reference/cstring/strstr/

و این:
http://stackoverflow.com/questions/11836...n-a-string

اینم واسه c یا c++ :
http://stackoverflow.com/questions/43763...tring-in-c
۲۴-دى-۱۳۹۵, ۲۰:۱۹:۵۹
وب سایت ارسال‌ها
پاسخ
matha.a آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: دى ۱۳۹۵

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #3
RE: پیدا کردن کلمه در یک متن
کد:
#include<iostream>
using namespace std;
#define p_length 113
#define w_length 7
#define wR_length 7
int main()
{
 char paragraph[p_length]="slm.emrooz_jome_hast_va_mn_poroje_mabani_daram_va_nemidoonm_che_takapoi_konm.cheghadr_in_poroje_he_sakhte.bale.$";
 char word[w_length]="poroje";
 char wordReplace[wR_length]="bahbah";
 int j=0;
 for(int i=0;i<p_length;i++)
{
  while(j<w_length && i+j<p_length && paragraph[i+j]==word[j])
   //(int j=0;j<w_length;j++)
  {
   j++;
  }
  if(j==w_length)
  {
   int n=0;
   while(i<j)
    if(paragraph[i]=='.')
     n++;
   cout<<n<<" ";
  }
 }
 return 0;
}

این نصف کدم هست برای قسمت اول سوالم که میخواد نشون بده کلمه ی مورد نظرم چندمین کلمس
ولی هرچی اجرا میکنم،بجای دادن عدد،7تا صفر میذاره برام



نمیتونمم از کتابخونه ای جز iostream استفاده کنم و به زبان c++هم هست

کدم رو ک debug کردم
تو قسمت while(I<j)میزنه I=107 و چون شرطwhileبرقرار نیست میره سر cout<<n;
نمیفهمم چرا iرو 107 گرفته و چکار کنم که درست شه

hal shod خنده بلد − بهینه شده برای ورژن جدید سوت − بهینه شده بری ورژن جدید

امممممممم ببخشید قسمت اول سوال حل شده اما خب هرکاری میکنم کلمه ی مورد نظرم بجای کلمه داخل متن کپی نمیشه

میشه لطفا کمکم کنید واقعا نیاز به کمک دارم غمگین - بهینه شده برای ورژن جدید
تنها کتابخونمم iostreamهست
(آخرین ویرایش در این ارسال: ۲۵-دى-۱۳۹۵, ۲۰:۵۲:۴۷، توسط babyy.)
۲۴-دى-۱۳۹۵, ۲۱:۰۶:۵۱
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #4
RE: پیدا کردن کلمه در یک متن
نقل قول: نمیتونمم از کتابخونه ای جز iostream استفاده کنم و به زبان c++هم هست
شما نمیتونید استفاده کنید یا گفته شده نباید استفاده کرد؟!
یعنی باید همه توابع رو دستی انجام داد؟


---
اگه شما نمیتونید استفاده کنید که این مثال دقیقا همون چیزه که میخوایید:
http://www.cplusplus.com/reference/string/string/find/
اتفاقا با c++  و iostream خیلی راحتر میشه اینکارارو انجام داد؛


ولی اگه گفته شده بجز iostram نمیتونید از چیز دیگه ای استفاده کنید بفرمایید که چه مطالبی رو فراگرفتید که در همون مورد راهنمایی کنیم
(آخرین ویرایش در این ارسال: ۲۵-دى-۱۳۹۵, ۲۰:۵۰:۳۶، توسط babyy.)
۲۵-دى-۱۳۹۵, ۲۰:۴۷:۰۷
وب سایت ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #5
RE: پیدا کردن کلمه در یک متن
این کد اصلاح شده رو هم بزارید که روی همون کار کنیم؛ چون این همونیه که هفتا صفر نشون میده
۲۵-دى-۱۳۹۵, ۲۱:۰۶:۱۹
وب سایت ارسال‌ها
پاسخ
matha.a آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: دى ۱۳۹۵

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #6
RE: پیدا کردن کلمه در یک متن
نه نباید جزiostreamکتابخونه ای استفاده کنم
ینی گفتن همه چیزا رو باید دستی خودتون انجامش بدین
اون که 7 تا صفر میداد حل شد

کد:
/** gharar ast k dar in ghesmat yek band neveshte shavad va pas az un sistem kalameye khasi ra peyda
* nemoode va mogheiate un kalame(kalame...jomle...) ra be karbar begooyad
*/
#include<iostream>
using namespace std;
#define p_length 104
#define w_length 7
#define wR_length 7
int main()
{
//introdusing strings
char paragraph[p_length]="slm_.emrooz_jome_hast_va_mn_poroje_mabani_daram_va_nemidoonm_che_takapoi_konm_.cheghadr_sakhte_.bale_.$";
char word[w_length]="poroje";
char wordReplace[wR_length]="bahbah";
//cin.get(paragraph,113,'$');
//movaghat
cout<<paragraph<<endl;
cout<<word<<endl;
cout<<wordReplace<<endl;
//find 1 word from input
for(int i=0;i<p_length;i++)
{
  int j=0;
  while(j<=w_length && i+j<=p_length && paragraph[i+j]==word[j])
   //(int j=0;j<w_length;j++)
  {
   j++;
  }
  //tell the place of word
  if(j==w_length-1)
  {
  
   int s_counter=1,w_counter=0,b=0;//ghabl az jomle aval . nist
   while(b<i)
   {
    //find which sentence is that
    if(paragraph[b]=='.')
     s_counter++;
    //find which word is that
    if(paragraph[b]=='_')
     w_counter++;
    b++;
   }
   cout<<"sentence:"<<s_counter<<endl<<"word:"<<w_counter<<" ";
   break;
  }
}
return 0;
}

این مال همون قسمت اول سوالمه ک درست شد
ولی برای قسمت دوم من فقط در حد آرایه و اینکه برای عوض کردن آرایه باید از عملیات تخصیص استفاده کرد بلدم و گفتن از همین روش هم باید استفاده کنیم
و خب ینی در این حد که:
کد php:
word[j]=paragraph[c]; 
ولی خب به هر روشی که میرم و میخوام نهایتا همین بشه جواب،برنامه جواب نمیده
(آخرین ویرایش در این ارسال: ۲۶-دى-۱۳۹۵, ۱۰:۰۵:۲۳، توسط babyy.)
۲۵-دى-۱۳۹۵, ۲۱:۲۵:۱۳
ارسال‌ها
پاسخ
babyy آفلاین
بازنشسته
*****

ارسال‌ها: 3,095
موضوع‌ها: 141
تاریخ عضویت: مرداد ۱۳۸۷

تشکرها : 35081
( 26090 تشکر در 9068 ارسال )
ارسال: #7
RE: پیدا کردن کلمه در یک متن
کد php:
/** gharar ast k dar in ghesmat yek band neveshte shavad va pas az un sistem kalameye khasi ra peyda
* nemoode va mogheiate un kalame(kalame...jomle...) ra be karbar begooyad
*/
#include<iostream>
using namespace std;
#define p_length 104
#define w_length 7
#define wR_length 12
int main()
{
 
//introdusing strings
 
char paragraph[p_length]="slm_.emrooz_jome_hast_va_mn_poroje_mabani_daram_va_nemidoonm_che_takapoi_konm_.cheghadr_sakhte_.bale_.$";
 
char word[w_length]="poroje";
 
char wordReplace[wR_length]="basasashbah";
 
//cin.get(paragraph,113,'$');
 //movaghat
 
cout<<paragraph<<endl;
 
cout<<word<<endl;
 
cout<<wordReplace<<endl
 
//find 1 word from input
 
for(int i=0;i<p_length;i++)
 {
 
 int j=0;
 
 while(j<=w_length && i+j<=p_length && paragraph[i+j]==word[j])
 
  //(int j=0;j<w_length;j++)
 
 {
 
  j++;
 
 }
 
 //tell the place of word
 
 if(j==w_length-1)
 
 {
//-----------------------------------Replace-babyy
 
  for(int t=0;t<=p_length;t++){
    if (
t==i){
    
std::cout << wordReplace ;
    
t=i+j-1;    
    }else{
    
std::cout << paragraph[t] ;    
    }
 
  }
 
  std::cout <<endl;
//----------------------------------
 
  int s_counter=1,w_counter=0,b=0;//ghabl az jomle aval . nist
 
  while(b<i)
 
  {
 
   //find which sentence is that
 
   if(paragraph[b]=='.')
 
    s_counter++;
 
   //find which word is that
 
   if(paragraph[b]=='_')
 
    w_counter++;
 
   b++;
 
  }
 
  cout<<"sentence:"<<s_counter<<endl<<"word:"<<w_counter<<" ";
 
  break;
 
 }
 }
 return 
0;


جواب قسمت دوم هم توی همین کد خودتون بود!!

مثلا در جمله زیر:

کد php:
slm_.emrooz_jome_hast_va_mn_poroje_mabani_daram_va_nemidoonm_che_takapoi_konm_.cheghadr_sakhte_.bale_.$ 


ما دنبال کلمه poroje  هستیم؛ این کلمه در جایگاه ۲۸ قرار داره (از صفر شروع به شمردن کردم)

در هربار اجرای حلقه‌ی خط شماره ۲۱ متغیر i یک واحد در جمله اصلیمون جلو میره تا کاراکتر به کارکتر بتونیم جمله رو جست و جو کنیم

اگر کلمه مورد نظرمون در جمله باشه متغیر i به شروع (جایگاه) این کلمه در جمله اشاره میکنه! یعنی مکان ۲۸ !!
و همچنین اگر کلمه موجود باشه شرط خط ۳۰ هم درست ارزیابی میشه

سوال:
 - حالا چرا جایگاه کلمه مورد نظرمون مهم هست؟
جواب:
- وقتی جایگاه کلمه مورد نظر رو در جمله داشته باشیم؛ میتونیم عملیات جایگزینی (replace) رو شبیه سازی کنیم! چطوری؟ به این شکل:

۱ . جمله مورد نظر کارکتر به کاراکتر خوانده شود
۲ . اگر به محل شروع کلمه مورد نظر رسیدیم؛ کلمه مورد نظر که قصد داریم جایگزین کنیم رو چاپ میکنیم و مقدار شمارنده را به مقدار زیر افزار میدهیم:
جایگاه مورد نظر (۲۸ - چون کلمه poroje از کارکتر ۲۸ شروع شده) + طول کمله مورد جست و جو(طول کلمه poroje ) - ۱ 
۳ . در غیر اینصورت کارکتر رو از جمله اصلی چاپ میکنیم

مثلا:
در جمله‌ی بالا i ما ۲۸ بدست اومده؛ یه حلقه for درست میکنیم؛  تا ۲۸ کارکتر اول رو از جمله اصلی پرینت میگریم:
کد:
slm_.emrooz_jome_hast_va_mn_

شرط دو برقرا میشه؛ کلمه‌ای که میخواییم جایگزین کنیم رو پرینت میگیریم و مقدار شمارنده رو به ۲۸ + ۷ - ۱ افزایش میدیم:
کد:
basasashbah

و بعد تا اخر شرط ۳ برقرا هست و بقیه جمله از جایگاه ۳۴ به بعد چاپ میشه:
کد:
_mabani_daram_va_nemidoonm_che_takapoi_konm_.cheghadr_sakhte_.bale_.$

که در نهایت از دید کاربر بیرون انگار کلمه مورد نظر جایگزین قبلی شده!!!


کد php:
slm_.emrooz_jome_hast_va_mn_basasashbah_mabani_daram_va_nemidoonm_che_takapoi_konm_.cheghadr_sakhte_.bale_.$ 
(آخرین ویرایش در این ارسال: ۲۶-دى-۱۳۹۵, ۱۰:۱۶:۰۴، توسط babyy.)
۲۶-دى-۱۳۹۵, ۱۰:۰۱:۵۵
وب سایت ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Question جستجوی یک کلمه در متن ΛΛ Θ l-l $ Σ Ω 30 33,720 ۱۰-دى-۱۳۹۱, ۱۸:۳۶:۵۷
آخرین ارسال: babyy

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS