PDA

View Full Version : جستجوی کاراکتر



amir_civil
یک شنبه 30 اردیبهشت 1386, 19:28 عصر
سلام دوستان
من یه مشکلی دارم که ممنون میشم اگه جواب بدین
ببینید ما یه متن داریم که شامل همه نوع عددکاراکترو... هست
حالا من چه جوری میتونم از توی این متن کلماتی رو که داخلشون حرف 'a' هست رو پیدا کنم؟
ممنون

emad_67
یک شنبه 30 اردیبهشت 1386, 20:34 عصر
می تونی با تابع strtok تک تک کلمه های متن رو جدا کنی و بعد با دستور strchr چک کنی ببینی حرف a توش وجود داشته یا نه اگه وجود داشت اون کلمه رو چاپ کنی

kiani.mehdi
یک شنبه 30 اردیبهشت 1386, 20:35 عصر
شرمنده وقت اینکه بشینم وبراتون کدش را بنویسیم اصلا نیست ولی
راهنمایی که میتونم بکنم و به دردتون میخوره اینه که شما باید ابتدا کلمات داخل یک متن را تشخیص بدهید این هم خیلی آسونه
نکتش هم اینه که در یک متن هر کلمه از کلمه بعدی با کاراکتر فاصله که کد اسکی اون الان یادم نیست (توی همه کتاب های برنامه نویسی هست ، روی اینترنت هم که کیلویی ریخته کد هاش) جدا میشه
پس میتونی متنت را پویش کنی تا به کاراکتر فضای خالی برسی که در این صورت اولین کلمه متن را پیدا کردی
برای بقیه کلمات هم به همین شکل
هر کلمه ای را هم که پیدا کردی می تونی با توابعی که در سرفایل string.h هست بفهمی که آیا در اون کلمه حرف مورد نظر (مثلا a) هست یا نه
احتمال زیا چنین تابعی باید در کامپایلر C++ باشه .لی چون تاحالا ازش استفاده نکردم مطمئن نیستم
ولی اگر هم نبود خودت میتونی یه تابع براش بنویسی به این صورت که
یک تابع با 2 تا آرگومان ورودی که یکی از جنس string (مثلا char *str) و یکی هم از جنس char
خروجی تابع یک بولین است که مشخص کننده اینه که ایا حرف تو تابع بوده یا نه

2 تا نکته را باید دقت کنی
اول اینکه نوع داده string توی C نداریم (مثل C# نیست)
برای پیاده سازی نوع های string به دوصورت میتونی عمل کنی
یا به صورت ارایه ای از کاراکتر ها
یا به صورتی که در پرانتز بالا گفتم
حالت دوم داینامیک تره
و نکته دوم هم اینه که متاسفانه نوع داده بولین هم در C نداریم
البته پیاده سازی اون خیلی سادست
خیلی از برنامه نویس ها از اعداد فرضی برای پیاده سازی بولین استفاده می کنن
مثلا 1 را به عنوان true و 0 را به عنوان false می گیرن
اما اگه خواستی یک نوع داده بولین برای خودت تعریف کنی و مثل بچه آدمی زاد مثلا بنویسی


bool a =true;

میتونی از دو روش استفاده کنی
توی node pad کد های زیر را بنویسی و با پسوند .h ذخیره کنی و بعد توی برنامه اصلی با استفاده از include به برنامه ات اضافش کنی



#ifndef boolean
#define boolean
typedef int bool;
const bool true=1;
const bool false=0;
#endif



راه دوم هم اینه که یه enum تعریف کنی و ازش استفاده کنی
اکه خواستی تا اون را هم بت بگم
ولی با همینا هم کارت را میافته فکر کنم
:چشمک:
امیدوارم که کمک خوبی بوده باشه
موفق باشید


فکر کنم کدش را برات مینوشتم زود تر از این تموم میشد تا این همه برات توضیح بدم :قهقهه: :چشمک:

البته توابع را دوست خوبم گفت ولی این همه چرندیات را گفتم که اگه یه جا یه همچین توابعی نبود بدونید چطوری باید نوشت
آماده خوری خوبه و لی نه همیشه

amir_civil
یک شنبه 30 اردیبهشت 1386, 22:10 عصر
سلام دوستان من کد زیر رو نوشتم

int i;
char str[MAX_PATH];
i=strlen(str);
if(str[i]==' ')
{
}i++
تا به فضای خالی میرسیم
حالا چه جوری باید بر گردیم به اول کلمه؟
با درستور seekp یا seekg هم جواب نگرفتم
ممنون

emad_67
دوشنبه 31 اردیبهشت 1386, 09:58 صبح
سلام دوستان من کد زیر رو نوشتم
کد:
int i;
char str[MAX_PATH];
i=strlen(str);
if(str[i]==' ')
{
}i++

شما اول باید حرف مورد نظر رو ببینی که تو کلمه هست یا نه بعد بیای space رو پیدا کنی
ولی به هر من این برنامه رو به این صورت برات نوشتم:


#include<iostream.h>
#include<string.h>
void main()
{
char s[80],ch,*token;
cout<<"enter your text:";
cin.getline(s,80);
cout<<"enter character:";
cin>>ch;
token=strtok(s," ");
while(token!=NULL)
{
if(strchr(token,ch)!=NULL)
cout<<token<<endl;
token=strtok(NULL," ");
}
}