字符串排序的一段代码

亚细亚 2015-12-08 09:50:44
在网上看了一段利用指针数组来排序字符串,发现这个代码有问题;源代码如下:

#include <stdio.h>
#include <string.h>
void sort(char *str[],int n)
{
char *temp; int i,j,k;
for(i=0;i<n-1;i++)
{
k=1;
for(j=i+1;j<n;j++)
if(strcmp(str[k],str[j])>0)
{
k=j;
}
if(k!=1)
{
temp=str[i];
str[i]=str[k];
str[k]=temp;
}
}
}
void main()
{
int i,n=4;
char *string[4]={"FORTRAN","PASCAL","BASIC","C"};
sort(string,n);
for(i=0;i<n;i++)
printf("%s\n",string[i]);
}

按照该代码运行之后,确实没有问题,按照字母的先后顺序进行了排序;
但问题是如果我将第一个字符串“FORTRAN”修改为"AASCAL",然后运行就排序不对了;这是误人子弟吗?!
来,哪位大师给修改一下;THS!
...全文
91 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2015-12-08
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <string.h>
void sort(char *str[],int n)
{
	char *temp; int i,j;
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
			if(strcmp(str[i],str[j])>0)
			{
				temp=str[i];
				str[i]=str[j];
				str[j]=temp;
			}
	}
}
void main()
{
	int i,n=4;
	char *string[4]={"AASCAL","PASCAL","BASIC","C"};
	sort(string,n);
	for(i=0;i<n;i++)
		printf("%s\n",string[i]);
}
北海明 2015-12-08
  • 打赏
  • 举报
回复
这个程序用的是选择排序思想,楼上说得对 k = 1 if (k != 1) 把1改成i
wang0635 2015-12-08
  • 打赏
  • 举报
回复
void sort(char *str[],int n) 函数的 k = 1; if (k != 1) 两行中 1 应该是 i 不知道是你打错了,还是书上印错了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧