سلام من یه برنامه میخواستم که یه متن رو کاربر بده به برنامه وبرنامه یه کلمه رو دراون پیدا کنه و موقعیت اون کلمه(درچندمین جمله؟چندمین خط؟و چندمین کلمه؟)رو نشون بده
و بعد از اون یه کلمه ی دیگه رو ک بازم اونو کاربر میده بهش،جایگذین کلمه ی سوال قبل کنه
واقعا نیاز به کمک دارم>_<
کد:
#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هست
نقل قول: نمیتونمم از کتابخونه ای جز iostream استفاده کنم و به زبان c++هم هست
شما نمیتونید استفاده کنید یا گفته شده نباید استفاده کرد؟!
یعنی باید همه توابع رو دستی انجام داد؟
---
اگه شما نمیتونید استفاده کنید که این مثال دقیقا همون چیزه که میخوایید:
http://www.cplusplus.com/reference/string/string/find/
اتفاقا با c++ و iostream خیلی راحتر میشه اینکارارو انجام داد؛
ولی اگه گفته شده بجز iostram نمیتونید از چیز دیگه ای استفاده کنید بفرمایید که چه مطالبی رو فراگرفتید که در همون مورد راهنمایی کنیم
این کد اصلاح شده رو هم بزارید که روی همون کار کنیم؛ چون این همونیه که هفتا صفر نشون میده
نه نباید جز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:
/** 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_
شرط دو برقرا میشه؛ کلمهای که میخواییم جایگزین کنیم رو پرینت میگیریم و مقدار شمارنده رو به ۲۸ + ۷ - ۱ افزایش میدیم:
و بعد تا اخر شرط ۳ برقرا هست و بقیه جمله از جایگاه ۳۴ به بعد چاپ میشه:
کد:
_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_.$