| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 821 人关注过本帖
标题:字符串操作
只看楼主 加入收藏
sunpy
Rank: 1
来 自:厦门
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-10-1
结帖率:100%
收藏
 问题点数:0 回复次数:2 
字符串操作
?

[align=left]用数组和函数实现如下程序

[/align]

[align=left]函数1:从键盘输入10个字符串(长度均不超过10

[/align]

[align=left]-函数2:对上述10个字符串用选择法依字典序进行排序(按从小到大)

[/align]

[align=left]函数3:用折半查找10个字符串中检索给定字符串

[/align]

[align=left]主程序:调用函数1--调用函数2--循环接收键盘输入的字符串(长度不超过10)直到输入为空串,每接收到一个字符串就调用函数3进行查找并打印查找结果

[/align]

[align=left]我的代码是

[/align]#include<stdio.h>
#include<string.h>
int
main()
{
    char a[10][10];
    void getstring(char (*p)[10]);
    void electsort(char (*p)[10]);
    void find(char (*p)[10],char *stri);
    //调用函数从键盘中输入10个字符串
    printf("please input 10 strings:\n");
    getstring(a);
    //对上述10个字符串采用选择法排序
    electsort(a);
    //循环输入需要检索的字符
    char string[10];
    do
    {
        printf("please input the string you want to find:\n");
        gets(string);
    //采用折半查找法找到该字符并输出查找结果
        find(a,string);
    }while((gets(string))!=0);
    return(0);
}
void
getstring(char (*p)[10])
{
    int i;
    for(i=0;i<10;i++)
        scanf("%s",*(p+i));
}        
//采用选择法对字符串进行排序
void
electsort(char (*p)[10])
{
    int i,j;
    int k;
    for(i=0;i<9;i++)
    {
        k=i;
        for(j=i+1;j<10;j++)
            if(strcmp(p[ i ],p[j])>0)
                k=j;
        if(k!=i)
        {
            char * temp;
            temp=p[ i ];
            p[ i ]=p[j];
            p[ j ]=temp;
        }
    }
}
//采用折半查找法查找指定的字符串,并输出查找结果
void
find(char (*p)[10] ,char * stri)
{
    int i;
    for(i=0;i<10;i++)
    {
        if(strcmp(p[i],stri)=0)
            printf("%s is the %d of the string array!\n",stri,i+1);
        else
            printf(" we can't find the %s in the string array!\n",stri);
    }
}
    编译时一直无法通过,请大家看一下问题处在哪里?
搜索更多相关主题的帖子: 字符 fon 
2007-11-29 11:24
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
函数参数类型不对 应为char *p[10]而不是char (*p)[10]
选择法排序错误,应为:
   k=i;
   for(j=i+1;j<10;j++)
            if(strcmp(p[ k],p[j])>0)
                k=j;

你的find函数也不是折半查找的算法,而是遍历的思想,没有利用排好序之后的优点
楼主自己再好好看下

英者自知,雄者自胜
2007-11-29 12:37
sunpy
Rank: 1
来 自:厦门
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-10-1
收藏
得分:0 
谢谢提醒,错误是真的不少啊!

荀子《劝学》:“不积跬步,无以至千里;不积小流,无以成江海.”
2007-11-29 12:44
快速回复:字符串操作
数据加载中...
 
   



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

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