PDA

View Full Version : سوال: جستجو در آرايه ي کاراکتري



MohammadGh2011
سه شنبه 31 اردیبهشت 1392, 21:16 عصر
سلام
دوستان من اين کد رو نوشتم حالا ميخوام تکميلش کنم که 10 تا اسمي که گرفته رو جستجو کنه، همه چي درسته فقط در خطي که مشخص کردم مشکل هست ، بايد 10 تا اسمي که ميگيره ريخته بشه اونجا ولي نميشه
دوستان لطفا سريعتر راهنمايي کنيد ممنونم
#include <iostream>
#include <string.h>

using namespace std;

void Flname(char FL[10][20]);
void SearchFL(char FL[10][20]);

int main()
{
char FL[10][20];
Flname(FL);
SearchFL(FL);

return 0;
}
void Flname(char FL[10][20])
{
int i,j;
cout << "Enter FirstNames And LastNames:\n";
for(i=0 ; i<10 ; ++i)
cin.getline(FL[i],20);
for(j=0 ; j< 10 ; ++j)
cout <<"\n FL Names: " << FL[j];

}


void SearchFL(char FL[10][20])
{
int j,i;
char str[20];// = "what?" //مشکل اينجاست
char str1[20];
char *pch;
cout << "\n";


cin.get(str1,20);
pch=strstr(str ,str1);
cout << pch;

}

manij_mhm
سه شنبه 31 اردیبهشت 1392, 22:05 عصر
سلام. مشکل شما اینجا نیست.

char str[20];// = "what?" //مشکل اينجاستدرواقع مشکل کد شما

cout << pch;است.
اگه نام مورد نظر با str برابر نباشه مقدار pch=null میشه و برنامه چیزی رو به خروجی نمی تونه بفرسته و خطا میده!!
از طرفی اگه نام مورد نظرتون در لیست موجود باشه، از اونجایی که شما pch رو به صورت اشاره گر تعریف کردید نمی تونید به صورت

cout << pch;از pch استفده کنید. به جای کد بالا

for (int i=0;i<20;i++)
cout << pch[i];
رو جایگزین کنید!

موفق باشید.

MohammadGh2011
سه شنبه 31 اردیبهشت 1392, 22:12 عصر
سلام
ممنون از پاسختون

ارور ميده لطفا تو کد پست 1 جايگزين کنيد و بعد از تست کردن قرار بديد...


ممنون

GENERAL IRAJ
سه شنبه 31 اردیبهشت 1392, 22:21 عصر
سلام ، سوالت کمی نا مفهومه ؟:گیج:
برنامه درست کار می کنه (فقط 10 تا اسم می گیره)
وقتی تابع search فراخوانی می شه کاربر باید رشته ای را برای انجام عمل مقایسه وارد بکنه
بعد از اینکه رشته رو گرفت باید عمل مقایسه رو با یه حلقه (for) انجام بدی
در ضمن اگه آرایه رو با اشاره گر تعریف بکنی کارت راحت می شه .:قلب:

saied_hacker
سه شنبه 31 اردیبهشت 1392, 22:29 عصر
من کد جستجو رو اینجوری تغییر دادم شما هم چون از تابع substring استفاده کردید هر رشته ای که حروف مورد نظر توش باشه رو پیدا میکنه.
لازم نبود بیاید یه ارایه جدید str تعریف کنید از همون پارامتری که ارسال کردید استفاده کنید.
void SearchFL(char FL[10][20])
{
int j,i;
//char str[20];
char str1[20];
char *pch;
cout << "\n";


cin.get(str1,20);
for(int i = 0; i < 20; i++)
{
pch = NULL;
if((pch=strstr(FL[i] ,str1)) != NULL)
cout <<"found";
}
cout << pch;

}

مشکل رو نفهمیدم :) - اگه میخای FL رو بریزی توی str باید از یه حلقه استفاده کنی چون ارایه رو نمیشه مستقیم با = کپی کرد...

MohammadGh2011
سه شنبه 31 اردیبهشت 1392, 23:24 عصر
من کد جستجو رو اینجوری تغییر دادم شما هم چون از تابع substring استفاده کردید هر رشته ای که حروف مورد نظر توش باشه رو پیدا میکنه.
لازم نبود بیاید یه ارایه جدید str تعریف کنید از همون پارامتری که ارسال کردید استفاده کنید.
void SearchFL(char FL[10][20])
{
int j,i;
//char str[20];
char str1[20];
char *pch;
cout << "\n";


cin.get(str1,20);
for(int i = 0; i < 20; i++)
{
pch = NULL;
if((pch=strstr(FL[i] ,str1)) != NULL)
cout <<"found";
}
cout << pch;

}

مشکل رو نفهمیدم :) - اگه میخای FL رو بریزی توی str باید از یه حلقه استفاده کنی چون ارایه رو نمیشه مستقیم با = کپی کرد...

اين کد يه جورايي کار ميکنه يه جورايي هم کار نميکنه
وقتي مثلا چندتا کاراکتر از يک اسم رو مينويسي بقيش رو مينويسه
منظور من اينه اگه کامل تر کار کنه عالي ميشه

ممنون