麻烦大家了!
题目是:用数组和函数实现如下程序:
――函数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就退出,怎么解决?还是我有关空串这个词有无解呢?
搜索更多相关的解决方案:
麻烦
----------------解决方案--------------------------------------------------------
问题1:当字符串的长度最长为10时,字符数组的长度应该为11,最后一个字节放‘\0’;
问题2:判断search[0]!='\0'就可以了,但是在循环之外,要赋值search[0] 为一个非0的数据;
char search[10];
search[0] = 'a';
for(t=0;search[0]!='\0';t++)
还有一点防止 t 越界;实际上在循环中完全可以把 t 省略。
----------------解决方案--------------------------------------------------------