快来看看这段二分查找字符的代码哪里错了

来源:百度知道 编辑:UC知道 时间:2024/06/14 19:40:56
功能要求:

用二分法在已排序的5个字符串上查找某字符串,如果找到则返回字符串所在的行标,若查找失败则返回-1。

char search(char e[5][9],int low,int heigh,char key[9])
{

cout<<"请输入要查找的字符串:"<<'\n';
cin.getline(key,9,'\n');
if(low>heigh)
return -1;
else
{
int mid = (low+heigh)/2;
if ((strstr(e[mid],key))>0)
return mid;
else if((strstr(e[mid],key)) >0)
{
low = mid + 1;
return search(e,low,heigh,key);
}
else
{
heigh = mid -1;
return search(e,low,heigh,key);
}
}
return -1;
}

strstr此函数是字符串查找函数,它的功能是在一个字符串中查找子串。查找的方法是在字符串1中从左边开始查找字符串2,若查找成功,返回字符串2在字符串1中第一次出现的位置,否则返回NULL,若字符串2为"",则返回字串1。
用 法: char *strstr(char *str1, char *str2);
程序例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *str1 = "Borland International", *str2 = "nation", *ptr; <

题意我不太理解,是不是在已排好顺序的字符串中寻找某字符串,下面是我用语言写的程序,可能不符合题意,还请谅解。
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"
int seach(char e[][20],int low,int high,char str[])
{int mid;
if(low>high)
return -1;
else
{mid=(low+high)/2;
if(strcmp(e[mid],str)>0)
{low=mid+1;
return seach(e,low,high,str);
}
else if(strcmp(e[mid],str)<0)
{high=mid-1;
return seach(e,low,high,str);
}
else return mid;
}
}

main()
{char e[5][20]={"Great Wall","Follow me","FORTRAN","Computer design","BASIC"};
int n;
char str[20];
printf("please input the string of you want to search:\n");
gets(str);
n=seach(e,0,4,str);
printf("\nthe row of string that you want to seach:%d",n);

}