Поиск строки в массиве символов с использованием Divide и Conquer

Допустим, у меня есть массив структур и у каждого элемента есть имя. Подобно:

struct something{
char name[200];
}a[NMAX];

Учитывая новую строку (массив символов), мне нужно найти правильный индекс для нее, используя разделяй и властвуй. Подобно:

char choice[200];
cin>>chioce;
int k=myFunction(choice);  // will return the index, 0 otherwise
// of course, could be more parameters
if( k )
cout<<k;

Я не знаю, как создать эту функцию поиска (я пытался, я знаю, как D&С работает, но я все еще учусь! ).

И нет, я не хочу использовать строки!

Вот что я попробовал:

int myFunction(char *choice, int l,int r)   // starting with l==0 && r==n-1
{
int m;
if(strcmp(a[m].name,choice)==0)
return m;
else{
m=(l+r)/2;
return myFunction(choice,l,m-1);
return myFunction(choice,m+1,r);
}
}

2

Решение

Это моё решение вашей проблемы. Но я изменил несколько вещей в вашем коде.

#include<iostream>
using namespace std;

#define NMAX 10

struct something{
char *name; //replaced with char pointer so that i can save values the way i have done
}a[NMAX];

int myFunction(char *choice, int l,int r)   // starting with l==0 && r==NMAX-1
{
if(l>r) //return if l has become greater than r
return -1;
int m=(l+r)/2;

if(strcmp(a[m].name,choice)==0)
return m+1;
else if(l==r) //returned -1 as the value has not matched and further recursion is of no use
return -1;
else{

int left= myFunction(choice,l,m-1);//replaced return
int right= myFunction(choice,m+1,r);//by saving values returned
if(left!=-1)                      //so that i can check them,
return left;                  //otherwise returning from here onlywould never allow second satatement to execute
if(right!=-1)
return right;
else
return -1;
}
}

int main(){

a[0].name="abc";
a[1].name="a";
a[2].name="abcd";
a[3].name="abcf";
a[4].name="abcg";
a[5].name="abch";
a[6].name="abcj";
a[7].name="abck";
a[8].name="abcl";
a[9].name="abcr";
char choice[200];
cin>>choice;
int k=myFunction(choice,0,NMAX-1);  // will return the index, 0 otherwise
// of course, could be more parameters
if( k !=-1)
cout<<k;
else
cout<<"Not found";
return 0;
}

Надеюсь, это поможет.

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector