| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 448 人关注过本帖
标题:麻烦大家了!
只看楼主 加入收藏
qingfengdan
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-11-27
收藏
 问题点数:0 回复次数:1 
麻烦大家了!
题目是:
        用数组和函数实现如下程序:
        ——函数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就退出,怎么解决?还是我有关空串这个词有无解呢?
搜索更多相关主题的帖子: 麻烦 
2007-11-30 22:38
zxc1998
Rank: 1
等 级:新手上路
威 望:1
帖 子:133
专家分:0
注 册:2007-3-21
收藏
得分:0 
问题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  省略。
2007-11-30 23:12
快速回复:麻烦大家了!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038792 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved