麻烦大家了!
题目是:用数组和函数实现如下程序:
——函数1:从键盘输入10个字符串(长度均不超过10)
——函数2:对上述10个字符串用“选择法”依字典序进行排序(按从小到大)。
——函数3:用“折半查找”在10个字符串中检索给定字符串。
——主程序:调用函数1->调用函数2->循环接收键盘输入的字符串(长度不超过10)直到输入为空串,每接收到一个字符串就调用函数3进行查找并打印查找结果。
以下是我的程序:
#include<stdio.h>
#include<string.h>
char a[10][10];
void scan()
{
int i;
char temp2[10]="error";
for(i=0;i<=9;i++)
{
printf("Please input the character string:\n");
scanf("%s",a[i]);
if(strlen(a[i])>10)
{
strcpy(a[i],temp2);
i--;
}
}
}
void sort(char a[][10],int n)
{
int j,k;char temp[10];
for(j=0;j<=n-1;j++)
{
for(k=j+1;k<n;k++)
if(strcmp(a[k],a[j])<=0)
{
strcpy(temp,a[j]);
strcpy(a[j],a[k]);
strcpy(a[k],temp);
}
}
}
int binsearch(char a[][10],char l[],int m)
{
int low,mid,high;
low=0;high=m-1;
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(l,a[mid])==0)return mid;
if(strcmp(l,a[mid])<0) high=mid-1;
else low=mid+1;
}
return(-1);
}
int main()
{
int p,q;
scan();
printf("Get the character strings:\n");
for(p=0;p<=9;p
++)
printf("%s\n",a[p]);
sort(a,10);
printf("Sort the character strings:\n");
for(q=0;q<=9;q++)
printf("%s\n",a[q]);
int t,goal;
char search[10];
for(t=0;search[0]!='\n';t++)
{
printf("Please input the character string you want to search:\n");
gets(search);
if(strlen(search)>10)
{
printf("INPUT ERROR!\n");
continue;
}
else if(strlen(search)>=1&&strlen(search)<=10)
{
goal=binsearch(a,search,10);
if(goal!=-1)
{
printf("the character string is the %dth in 10.\t\t",goal+1);
printf("%s\n",a[goal]);
}
else printf("DON'T FIND THE CHARACTER YOU WANT.\n");
}
}
return 0;
}
问题1:在scan函数中正好输入10长度的会出现输出问题。而在超过10长度时就会按照要求舍去呢?
问题2:为什么在最后输入search时直接enter无法结束程序,而在函数中加个search[0]=='\0'或'\n'作为条件时会在不输入search值使直接结束程序呢?而用search=="\0"或"\n"会继续循环。那如何才能符合题目要求结束程序。我对空串理解是直接enter就退出,怎么解决?还是我有关空串这个词有无解呢?