| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 643 人关注过本帖
标题:关于排列字符串的问题
只看楼主 加入收藏
xichma
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-11-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
关于排列字符串的问题
这是本人写的一个程序,用来排列5个字符串。下面的没什么问题,可当删掉   #include<conio.h>  和 clrscr();   后就不行了,哪位高手指教一下。谢啦!


#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{       void sort(char *p[]);
    void print(char *p[]);
    clrscr();
    char *a[5];
    int i;
    for(i=0;i<5;i++)scanf("%s",a[i]);
    sort(a);
    print(a);
}
void sort(char *p[])
{       char *m;
    int i,j,k;
    for(i=0;i<4;i++)
    {    k=i;
        for(j=i+1;j<5;j++)
          if(strcmp(p[k],p[j])>0)k=j;
        if(k!=i)
        {m=p[i];p[i]=p[k];p[k]=m;}
    }
}
void print(char *p[])
{    int i;
    for(i=0;i<5;i++)
        printf("%s\n",p[i]);
}
搜索更多相关主题的帖子: 字符 排列 
2009-11-19 00:04
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:5 
你的程序没有问题,你说的那种情况可能是编译器的问题,我在WIN-tc上运行了一下,完全没问题
#include<stdio.h>
#include<string.h>
void main()
{
    void sort(char *p[]);
    void print(char *p[]);
    char *a[5];
    int i;
    for(i=0;i<5;i++)
        gets(a[i]); //因scanf以空格为结束符,最好用gets函数?
    sort(a);
    putchar('\n');
    print(a);
    getch();
}
void sort(char *p[])
{
    char *m;
    int i,j,k;
    for(i=0;i<4;i++)
    {
        k=i;
        for(j=i+1;j<5;j++)
          if(strcmp(p[k],p[j])>0)   k=j;
          if(k!=i)
          {
              m=p[i];
              p[i]=p[k];
              p[k]=m;
          }
    }
}

void print(char *p[])
{
    int i;
    for(i=0;i<5;i++)
        printf("%s\n",p[i]);
}
2009-11-19 09:44
陈大师
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:231
专家分:1038
注 册:2009-11-4
收藏
得分:10 
你定义的char *a[5],是一个指针数组,有5个元素,都是指针类型,但是每个指针所指向一个字符串的大小却没有定义。我改了你的程序·····看看先···
#include<stdio.h>
//#include<conio.h>可以去掉
#include<string.h>
void main()
{       void sort(char *p[]);
    void print(char *p[]);
  // clrscr();可以去掉
    char *a[5];
    int i;
    for(i=0;i<5;i++)
        a[i]=new char [80],scanf("%s",a[i]);//每个字符串申请80个字符的空间
    sort(a);
    print(a);
}
void sort(char *p[])
{       char *m;
    int i,j,k;
    for(i=0;i<4;i++)
    {    k=i;
        for(j=i+1;j<5;j++)
          if(strcmp(p[k],p[j])>0)k=j;
        if(k!=i)
        {m=p[i];p[i]=p[k];p[k]=m;}
    }
}
void print(char *p[])
{    int i;
    for(i=0;i<5;i++)
        printf("%s\n",p[i]);
}
2009-11-19 21:22
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:2 
程序代码:
int cmop(const void*s1,const void*s2);
#define LONG 100
#define M 5
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char buf[M][LONG],*message[M];
int count;
for(count=0;count<M;count++){
message[count]=buf[count];
gets(message[count]);
}
qsort(message,M,sizeof(message[0]),cmop);
for(count=0;count<M;count++)
puts(message[count]);
return 0;
}
int cmop(const void *s1,const void *s2)
{
return strcmp(*(char**)s1,*(char**)s2);
}

这个是我用库函数qsort()写的程序,大家可能有些看不懂!见谅!

愿用余生致力编程
2009-11-19 21:43
xichma
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-11-18
收藏
得分:0 
回复 3楼 陈大师
谢啦,修改的地方很精辟,收获很大。我想再请教一下,不指明指针指向的字符串大小会怎么样?
2009-11-19 23:41
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:2 
回复 5楼 xichma
很简单,你如果要保持字符串必须要有空间,你的行为就是在没有空间的情况下
输入字符串:比如:
char *p;
scanf("%s",p);

p作为未初始化的一个指针,指向一个未知的区域,
而后面的赋值语句是想想这个未知的区域写数据。
肯定是非法的。

所以必须为此分配空间。

要练习算法就来http:///!!有挑战哦!!
2009-11-22 11:00
jcslt
Rank: 8Rank: 8
来 自:90-xx.com
等 级:蝙蝠侠
帖 子:251
专家分:975
注 册:2009-10-10
收藏
得分:1 
分配可以用new/delete或malloc/free;

www.
2009-11-22 11:24
快速回复:关于排列字符串的问题
数据加载中...
 
   



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

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