PDA

View Full Version : کمک درباره برنامه جستوجو در میان آرایه های رشته ای



arashonline
پنج شنبه 10 دی 1388, 22:52 عصر
درود بر شما
من یه برنامه ساده نوشتم، اول 10 تا شماره و اسم می گیره
بعد اگر در قسمت جستوجو شماره رو بزنیم اسم رو میاره

تا اینجا برنامه درست کار می کنه
اما زمانی که در قسمت جستوجو اسم رو میزنم، با اینکه اسم search شده توی لیست موجوده اما نمی تونه پیداش کنه

برای تعریف آرایه رشته ای به این فرم نوشتم


char name[10][10];


برای گرفتن اسامی از این دستور استفاده کردم:


for(i=0;i<10;i++)
{
printf("\nPlease enter the name of person %d: ",i+1);
gets(name[i]);
}

و برای جستوجو این دستور رو نوشتم:



clrscr();
printf("Enter a name to find number:");
gets(name[10]);
for(i=0;i<10;i++)
{
if(name[i]==name[10])
{
printf("\nPhone number of \"%s\" is \"%d\" !!!",name[i],number[10]);
getch();
goto start;
}
}
printf("\nThe phone number of \"%s\" is not in the list!!! ",name[10]);
getch();


اگر راهنمایی کنید ممنون میشم

Salar Ashgi
جمعه 11 دی 1388, 00:01 صبح
قسمت if شما نادرسته ، چون وقتی تعداد اعضای آرایه 10 تا باشه ، اندیس ها از صفر تا 9 قابل دسترسی

هستند و

name[10];//False
if(name[i] == name[10]) // False


یک مثال ساده :



#include <iostream>
#include <conio>
int main(){
char a[2][4] = {"abcd","efgh"};
char b[4] = {"efgh"};
int k=0;
for(int i=0;i<2;i++){
for(int j=0;j<4;j++){
if(a[i][j] == b[j])
k++;
else
k--;
}
if(k==4)
break;
else
k=0;
}
if(k==4)//string has been found
cout<<"Found";
else
cout<<"Not Found";
getch();
}

arashonline
جمعه 11 دی 1388, 20:58 عصر
درود بر شما
من آرایه رو 11 تایی تعریف کردم، 10 تای نخست، اسامی کاربر هاست، و در آرایه ی یازدهم اون اسمی رو که کاربر می خواد دنبالش بگرده میریزه،
کل برنامه رو میزارم شاید جاهای دیگه اشتباه کرده باشم:

#include <stdio.h>
#include <conio.h>
//this is a program that get 10 number and 10 name, and in this program you can search name and phone number
void main()
{
//We define two 11DIM array, one for names(names[11]) and one for numbers(number[11])
//frist 10DIM for save name and number and lastDIM for search
int number[11];
char name[11][10];
int i;
char asks;
clrscr();
//in the next for loop program get numbers and names of 10 people
for(i=0;i<10;i++)
{
clrscr();
printf("Please enter number %d: ",i+1);
scanf("%d",&number[i]);
printf("\nPlease enter the name of person %d: ",i+1);
scanf("%s",&name[i]);
}

start:
clrscr();
//next for loop show the name and the phone number in the list
for(i=0;i<10;i++)
{
printf("number of \"%s\" is \"%d\"! \n",name[i],number[i]);
}
//next task ask user that he want to search the name or the number
printf("\n\nDo you want search, press \"U\" to search Number\nOr press\"N\" to search Name:");
asks=getchar();

if (asks=='u')
{
clrscr();
printf("Enter a number to find name:");
scanf("%d",&number[10]);
for(i=0;i<10;i++)
{
if(number[i]==number[10])
{
printf("\nNumber \"%d\" is for \"%s\" !!!",number[10],name[i]);
getch();
goto start;
}
}
printf("\nNumber \"%d\" is not in the list. ",number[10]);
getch();
goto start;
}
else if (asks=='n')
{
clrscr();
printf("Enter a name to find number:");
scanf("%s",&name[10]);
for(i=0;i<10;i++)
{
if(name[i]==name[10])
{
printf("\nPhone number of \"%s\" is \"%d\" !!!",name[i],number[10]);
getch();
goto start;
}
}
printf("\nThe phone number of \"%s\" is not in the list!!! ",name[10]);
getch();
goto start;
}
else
{
clrscr();
goto start;
}
}

Salar Ashgi
جمعه 11 دی 1388, 21:48 عصر
درود بر شما
من آرایه رو 11 تایی تعریف کردم، 10 تای نخست، اسامی کاربر هاست، و در آرایه ی یازدهم اون اسمی رو که کاربر می خواد دنبالش بگرده میریزه،
کل برنامه رو میزارم شاید جاهای دیگه اشتباه کرده باشم:


کدتون کمی طولانی و مبهم هستش ، اگه از روش مثالی که زدم استفاده کنید ، مشکلتون

حل میشه . ولی یک اشتباه بارزی که در کد شما به چشم میخوره استفاده کردن از یک

آرایه دوبعدی بعنوان آرایه تک بعدی است ، مثل کد زیر :



if(name[i]==name[10])//False


که این ساختار درست نیست ، مورد بعدی استفاده از ساختار منسوخ goto هستش که باز

به هیچ وجه توصیه نمیشه ،

اگه این موارد رو برطرف کنید و کمی با دقت روی مساله فکر کنید ، حتما مشکلتان حل خواهد

شد .

موفق باشید .