| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 371 人关注过本帖
标题:忙翻看一下程序的问题!!!!!
只看楼主 加入收藏
孤独地生活
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-3-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
忙翻看一下程序的问题!!!!!
用指针法编程,从键盘上输入多个字符串(每个串不超过15个字符且没有空格),将这些字符串按从小到大的次序排列出来。
实验步骤与要求:
(1)    设计二维数组存放多个字符串;
(2)    设计指针数组用于访问每个字符串;
(3)    在主函数中输入多个字符串;
(4)    对多个字符串进行排序处理;
(5)    输出排序结果。

我的自编程序如下:
void main()
{
    int i;
    char *s[N][15];
    void print(char *str[N][15],int n);
    void sort(char *str[N][15],int n);
    for(i=0;i<N;i++)
    {
        printf("请输入%d 串字符:",i+1);
        scanf("%s",&s[i]);
    }
    sort(s,N);
    print(s,N);    //将二维数组的首地址传给print

}
void sort(char *str[N][15],int n)
{
    int i,j,k;
    char *temp;
    for(i=0;i<N-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(strcmp(str[k],str[j])>0) k=j;
        if(k!=i) temp=str[i],str[i]=str[k],str[k]=temp;

    }

        

}   
void print(char *str[N][15],int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("%s\n",str[i]);
   
}

请问不能够在sort函数中将char *str[N][15]变成str[]来比较str[1][]和str[2][]的大小呢?
应该怎样修改才能使输出的字符串按字符串的大小从大到小输出呢?(必须要用指针编程实现,要求如题,请高手帮忙解决下难题!)
搜索更多相关主题的帖子: 字符串 
2011-03-23 19:32
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:7 
还是用结构体来比较给力!

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-23 21:15
Glost
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:54
专家分:48
注 册:2010-10-5
收藏
得分:7 
你的程序能通过编译吗?
首先你定义了一个二维指针数组,没必要这样吧,还有在你整理的函数中,直接将字符串赋值给字符串,很明显是错误的做法!
我帮你改改!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N  5    //这里可以随便设置输入字符串的个数
void swap(char *p1,char *p2)  //因为字符串不能直接赋值,这个函数就是将p1与p2的值互换
{
    char ch[15];
    strcpy(ch,p1);
    strcpy(p1,p2);
    strcpy(p2,ch);
}
void main()
{
    int i,j;
    char str[5][15];
    char *p[5]={str[0],str[1],str[2],str[3],str[4]};//将一位数组分别赋值的首地址赋给指针,不能整体赋值给指针数组!
    for(i=0;i<N;i++)
        scanf("%s",str[i]);//这里不用加“&”,因为数组名本身表示的就是首地址(二维数组可以看成N个一维数组)
    system("cls");
    for(i=0;i<N-1;i++)
        for(j=i+1;j<N;j++)
            if(strcmp(p[i],p[j])>0)
                swap(p[i],p[j]);//将字符串从小到大排序
    for(i=0;i<N;i++,printf("\n"))
        puts(p[i]);   //输出
}

只有一条路不能选择—那就是放弃的路;只有一条路不能拒绝—那就是成长的路。
2011-03-23 21:57
艺术写真
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2011-3-23
收藏
得分:7 
这个也无法通过编译呀?????????????????
2011-03-23 22:05
Glost
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:54
专家分:48
注 册:2010-10-5
收藏
得分:0 
我上面写的没问题,我在VC上运行了,你是什么编译器啊,不能运行,提示什么错误啊?

只有一条路不能选择—那就是放弃的路;只有一条路不能拒绝—那就是成长的路。
2011-03-24 18:10
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
利用结构体编写的字符串排序程序
程序代码:
root@~/prog #cat strsort.c
#include <stdio.h>
#define N 5            //5个字符串

//定义一个结构
struct string {
        char str[15];
};

int main (void) {
        struct string array[N];                 //声明结构数组array
        char tmp[10];                           //临时字符数组
        int cmpstr (char s1[],char s2[]);       //函数cmpstr,比较两个字符串
        void cpstr (char dest[],char source[]); //字符串拷贝函数
        int i=0,j,n;

        printf ("Enter 5 character strings:\n");

        for(i=0;i<N;i++) {                      //输入5个字符串
                scanf ("%s",array[i].str);
        }

        printf ("Before sorted ...\n");

        for (i=0;i<N;i++) {                      //打印排序前的字符数组
                printf ("%s\n",array[i].str);
        }

        printf ("\n\n");
//对字符数组做升序排列
        for(i=0;i<N-1;i++) {
                for(j=i+1;j<N;j++) {
                        n=cmpstr(array[i].str,array[j].str);
                        if(n==1) {
                                cpstr(tmp,array[i].str);
                                cpstr(array[i].str,array[j].str);
                                cpstr(array[j].str,tmp);
                        }
                }
        }

        printf ("After sorted...\n");
//打印排序以后的结构
        for(i=0;i<N;i++) {
                printf ("%s\n",array[i].str);
        }

        printf ("\n");

        return 0;
}
//compare string1 and string2
int cmpstr (char s1[],char s2[]) {
        int i=0;
        while(s1[i]!='\0'&&s2[i]!='\0') {
                if(s1[i]>s2[i]) {
                        return 1;
                }
                if(s1[i]<s2[i]) {
                        return -1;
                }
                i++;
        }
        if(s1[i]=='\0'&&s2[i]=='\0') {
                return 0;
        }
}
//copy string from source to destination
void cpstr (char dest[],char source[]) {
        int i;
        for(i=0;source[i]!='\0';i++) {
                dest[i]=source[i];
        }
        dest[i]='\0';
}
root@~/prog #


testing.....
root@~/prog #./strsort
Enter 5 character strings:
afdwer2
z23rasdf
qwer234
zq234
q234
Before sorted ...
afdwer2
z23rasdf
qwer234
zq234
q234


After sorted...
afdwer2
q234
qwer234
z23rasdf
zq234

root@~/prog #

[ 本帖最后由 ansic 于 2011-3-24 23:45 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-24 23:41
快速回复:忙翻看一下程序的问题!!!!!
数据加载中...
 
   



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

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