| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 642 人关注过本帖
标题:[求助]关于字符串排序程序,有些问题,请指教
只看楼主 加入收藏
k_summer7
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-3-19
收藏
 问题点数:0 回复次数:9 
[求助]关于字符串排序程序,有些问题,请指教

To ALL:
各位大虾,我正在学习C语言,昨天做了一个小题目,就是输入5个字符串,将其从小到大排序并输出,代码如下:
#include<stdio.h>
#include<malloc.h>
#include<string.h>

#define SIZE 20

void main()
{
char *str[5],temp[SIZE];
printf("input five strings:\n");
for(int i=0; i<5; i++)
{
str[i] = (char*)malloc(sizeof(char)*SIZE);
if(str[i] == NULL)
{
printf("memory allocate failed!\n");
return;
}
fflush(stdin);
gets(str[i]);
}

printf("the input is:\n");
for(i=0; i<5; i++)
puts(str[i]);
printf("\n");

for(i=0; i<4; i++)
{
for(int j=i+1; j<5; j++)
{
if(strcmp(str[i],str[j]))
{
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
}
printf("the sort result is:\n");
for(i=0; i<5; i++)
puts(str[i]);
printf("\n");

for(i=0; i<5; i++)
free(str[i]);
for(i=0; i<5; i++)
str[i] = NULL;

return;
}
程序能够运行,但不能实现正常排序,起初我以为是我的排序算法有问题,但在输入整数的情况下是能够实现正确排序的,请问为什么字符串就不能够呢,程序问题出在哪里呢?

搜索更多相关主题的帖子: 字符 指教 
2007-04-12 07:49
Javal
Rank: 1
等 级:新手上路
威 望:1
帖 子:108
专家分:0
注 册:2006-5-7
收藏
得分:0 

#include<stdio.h>
#include<malloc.h>
#include<string.h>

#define SIZE 20

void main() // 規範的寫法是 int main(void)
{
int i = 0;
char *str[5],temp[SIZE];
printf("input five strings:\n");
for(/*int*/ i=0; i<5; i++)
{
str[i] = (char*)malloc(sizeof(char)*SIZE);
if(str[i] == NULL)
{
printf("memory allocate failed!\n");
return -1;
}
fflush(stdin);
gets(str[i]);
}

printf("the input is:\n");
for(i=0; i<5; i++)
puts(str[i]);
printf("\n");

for(i=0; i<4; i++)
{
for(int j=i+1; j<5; j++)
{
if(strcmp(str[i],str[j]) > 0) // 你的if表達式只能判斷兩個字符串是否相等;如果要降序排列就改爲"<0"
{
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
}
printf("the sort result is:\n");
for(i=0; i<5; i++)
puts(str[i]);
printf("\n");

for(i=0; i<5; i++)
free(str[i]);
for(i=0; i<5; i++)
str[i] = NULL;

return 0;
}


猝然临之而不惊,无故加之而不怒 /?spaced" target="_blank">Linux C资料
2007-04-12 10:35
k_summer7
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-3-19
收藏
得分:0 
感谢楼上的指出我的编码规范问题
可是为什么排序不成功呢?
2007-04-12 19:46
Javal
Rank: 1
等 级:新手上路
威 望:1
帖 子:108
专家分:0
注 册:2006-5-7
收藏
得分:0 
if(strcmp(str[i],str[j]) > 0)

把这个if语句改成这样就可以了,我在C-FREE3.5运行能正确排序

猝然临之而不惊,无故加之而不怒 /?spaced" target="_blank">Linux C资料
2007-04-13 09:09
lhpjj
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-11-29
收藏
得分:0 
fflush(stdin);
这是什么函数哟什么作用啊
2007-04-13 15:06
hy5790624
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-4-13
收藏
得分:0 
以下是引用lhpjj在2007-4-13 15:06:20的发言:
fflush(stdin);
这是什么函数哟什么作用啊

清空缓存用的,你输入字符按回车,会产生一个回车字符,用上面的函数,可以清除!
我是刚刚在进入C语言的,有什么错误不要见怪!!!

2007-04-13 22:59
zw1213
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-4-14
收藏
得分:0 
javal说的对,void main()这种不对
2007-04-14 10:31
旭日潜龙
Rank: 1
等 级:新手上路
帖 子:798
专家分:0
注 册:2007-3-29
收藏
得分:0 
以下是引用zw1213在2007-4-14 10:31:02的发言:
javal说的对,void main()这种不对

其实你还是可以编译通过的....
void main()是C++的习惯.


灌水只发表情!
2007-04-14 12:18
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
以下是引用旭日潜龙在2007-4-14 12:18:01的发言:

其实你还是可以编译通过的....
void main()是C++的习惯.

void main()什么时候成了C++的习惯了,我看的The C++ Program Language中没有一个地方出现void main()

全部都是int main()


雁无留踪之意,水无取影之心
2007-04-14 13:31
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 

c中只有以下两种定义方式是正确的:

int main( void )

int main( int argc, char *argv[] )


   好好活着,因为我们会死很久!!!
2007-04-14 18:22
快速回复:[求助]关于字符串排序程序,有些问题,请指教
数据加载中...
 
   



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

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