我的这个程序有点问题,请高手指教一下。感激~
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#define N 100
void sorted(char *line,int n)
{
int i,j;
char *temp,*p[N];
for(i=0;i<n;i++)
{
scanf("%s",line);
p[i]=(char*)calloc(strlen(line),1);
strcpy(p[i],line);
}
for(i=1;i<n;i++)
for(j=0;j<n-1;j++)
{
if(strcmp(p[j],p[j+1])>0)
{
temp=p[i];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
void main()
{
int i,n;
char line[N];
printf("请输入n= ");
scanf("%d",&n);
printf("请输入%d个字符串:\n",n);
sorted(line,n);
printf("字符串排序后为:\n");
//for(i=0;i<n;i++)
printf("\n %s",line);
// printf("\n %s",line[i]);
printf("\n");
}
字符串的排列问题,就是打印不出排列后的全部字符串。
请高手指教一下。。。qq 285847630 感激不尽。。。
----------------解决方案--------------------------------------------------------
回复 1# zhuweinact 的帖子
这个程序思路有些问题的C语言实参给形参传值,是"值传递",所以void sorted(char *line,int n)形参line指向的地址改变了,但对main函数里的实参line没有影响的.
应该这样,不过这里temp是这样定义char temp;
if(strcmp(p[j],p[j+1])>0)
{
temp=*p[i];
*p[j]=*p[j+1];
*p[j+1]=temp;
}
再说你开辟了内存空间也没有释放也是不良习惯.
我没有仔细去看,你自己上机运行下
实现字符串排序可以有更简单的办法.
----------------解决方案--------------------------------------------------------
楼上的解释也有问题
[flash=400,300]http://yzfy.byethost17.com/flash.php[/flash][color=white]
----------------解决方案--------------------------------------------------------
可在函数sorted()内实现输出:
printf("字符串排序后为:\n");
for(i=0;i<n;i++)
puts(p[i]);
----------------解决方案--------------------------------------------------------
[bo][un]爱喝牛奶的猫咪[/un] 在 2008-6-19 13:44 的发言:[/bo]
楼上的解释也有问题
http://yzfy.byethost17.com/flash.php
楼上的解释也有问题
http://yzfy.byethost17.com/flash.php
请问我说的有什么错误?向你学习
----------------解决方案--------------------------------------------------------