| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 445 人关注过本帖
标题:字符串排序问题,求助下
只看楼主 加入收藏
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
结帖率:78.13%
收藏
已结贴  问题点数:10 回复次数:6 
字符串排序问题,求助下
#include <stdio.h>
#include <string.h>
void swap(char *p1,char *p2)
{
    char *p;
    strcpy(p,p1);
    strcpy(p1,p2);
    strcpy(p2,p);
}
main()
{
    char *str1,*str2,*str3;
    printf("please input three strings\n");
    scanf("%s,%s,%s",str1,str2,str3);

    if(strcmp(str1,str2)>0)
        swap(str1,str2);
    if(strcmp(str1,str3)>0)
        swap(str1,str3);
    if(strcmp(str2,str3)>0)
        swap(str2,str3);
    printf("%s\n%s\n%s\n",str1,str2,str3);
}
搜索更多相关主题的帖子: void include please 字符串 
2013-01-17 21:37
qiankai
Rank: 2
等 级:论坛游民
帖 子:35
专家分:49
注 册:2012-4-22
收藏
得分:0 
  你在主函数中定义了字符型指针str1,str2,str3,到了后两行却想以字符串的格式将它们从键盘输入,有点矛盾。还有就是如果想用scanf读入字符串最好不要连着用"%s%s%s",尽管编译的时候可能不会报错,运行的时候肯定会报错,建议用分开来的scanf("s",str1);scanf("s",str2); 或者用gets(str1)来读入数据。
2013-01-17 22:46
杂召流金
Rank: 2
来 自:广西
等 级:论坛游民
帖 子:32
专家分:10
注 册:2012-11-24
收藏
得分:0 
最后printf应该是*str1,*str2,*str3吧
2013-01-17 23:09
落雨and无声
Rank: 2
等 级:论坛游民
帖 子:48
专家分:30
注 册:2012-10-5
收藏
得分:0 
这怎么可能运行的了,char *是指向字符的指针,而你用它去存字符串是不行的。用char *类型区存储字符串只能在初始化字符串时行的通,比如char *s="xidian",这时编译系统会自动的为s分配一定的数组来存储这些字符。直接用char *来存放字符串是行不通的。
2013-01-17 23:33
ksddah
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:53
专家分:135
注 册:2012-12-11
收藏
得分:10 
程序代码:
//C语言字符串排序
#include<stdio.h>

#define N 3   //设定的字符串个数 

int cmp(char *p1,char *p2)   //字符串比较函数 
{
    int i=0;
    while(*(p1+i)==*(p2+i))
    {
       if(*(p1+i)=='\0')
          return 0;
          i++;
    }
       return *(p1+i)-*(p2+i);
}

void sort(char *p[N])    //字符串排序 
{
   char *temp;
   for(int i=0;i<N-1;i++)
      for(int j=i+1;j<N;j++) 
          if(cmp(p[i],p[j])<0) /* 交换的是字符串的地址,不是字符串的内容,可更改 */
          {
              temp=p[i];
              p[i]=p[j];
              p[j]=temp;
          }
}

int main()
{
    char s[N][21];/* 设定每个字符串不超过20字节 */ 
    char *t[N];
    printf("Please input %d strings one by one:\n",N); 
    for(int i=0;i<N;i++)
       {
             scanf("%s",s[i]);
          t[i]=s[i];
       }
    sort(t);
    printf("The sequence after sort is:\n"); 
    for(int i=0;i<N;i++) 
    printf("%s\t",t[i]); 
    return 0; 
}

图片附件: 游客没有浏览图片的权限,请 登录注册
2013-01-17 23:47
qiankai
Rank: 2
等 级:论坛游民
帖 子:35
专家分:49
注 册:2012-4-22
收藏
得分:0 
五楼的这位兄弟,主函数里i 都没有定义就用了,编译肯定过不了,不知从哪里粘贴的图片来糊弄人。楼主也没复制一下代码,自己编译一下,就认同了五楼的代码,真是佩服啊~
2013-01-18 11:41
globc
Rank: 2
等 级:论坛游民
帖 子:15
专家分:12
注 册:2013-1-20
收藏
得分:0 
把char*改成char数组。还有最好不要用scanf,改用fgets函数。
2013-01-20 00:26
快速回复:字符串排序问题,求助下
数据加载中...
 
   



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

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