求高手看看我的代码错在哪里//////输入5个字符串,按由小到大的顺序输出(用指针做)

//////输入5个字符串,按由小到大的顺序输出(用指针做)

#include <iostream>
#include<string>
using namespace std;
void px(char *p[],int n)
{
char *a=p[0];
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(strcmp(p[i],p[j])>0)
{
a=p[i];
p[i]=p[j];
p[j]=a;
}
}
}
}
void main()
{
char *str[5];
for(int i=0;i<5;i++)
cin>>str[i];
px(str,5);
for(int i=0;i<5;i++)
cout<<str[i]<<" ";
}

#include <iostream>
#include<string>
using namespace std;
void px(char *p,int n)
{
char a;
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(strcmp(&p[i],&p[j])>0)
{
a=p[i];
p[i]=p[j];
p[j]=a;
}
}
}
}
void main()
{
char *str;
str=(char *)malloc(5*sizeof(char));
for(int i=0;i<5;i++)
cin>>str[i];
px(str,5);
for(int i=0;i<5;i++)
cout<<str[i]<<" ";
}追问

哥哥,请问
PX函数中
,if(strcmp(&p[i],&p[j])>0)
{
a=p[i];
p[i]=p[j];
p[j]=a;
}
strcmp括号里p[i],p[j]已经是地址了。。再加一个&进行比较 可行么?而且a定义的是char a,,p[i]是地址,,可以赋值么

另外str=(char *)malloc(5*sizeof(char));是什么意思呀~~~

运行出来只显示第一个字母啊

追答

str=(char *)malloc(5*sizeof(char)),str是个char *的指针类型,该指针指向了一个分配5个char类型元素的首地址,相当于定义char str[5]的数组
p[i],p[j]是char类型,而不是地址,&符号之后就是取值,这里p是char *指针类型,存储的是地址。p[i]就是char类型了。
另外运行结果是正确的,我不知道你那怎么只显示一个字母,你可以在最后加两句int i;cin>>i语句等待输入

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-12
我用的是vc6.0运行环境,已经能正常运行
#include <iostream>
#include<string>
using namespace std;
void px(char *p,int n)
{
char a=p[0];
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(strcmp(&p[i],&p[j])>0)
{
a=p[i];
p[i]=p[j];
p[j]=a;
}
}
}
}
void main()
{
char str[5];
for(int i=0;i<5;i++)
cin>>str[i];
px(str,5);
for(int j=0;j<5;j++)
cout<<str[j]<<" ";
cout<<endl;
}
相似回答