devc++ c语言 字符串排序

来源:百度知道 编辑:UC知道 时间:2024/05/21 01:57:27
输入正整数 n 和 n 个字符串,按从小到大的顺序输出 n 个字符串。
程序如下。
为什么我输入:
2
beijing
china
得到的是:
bchina
china
这种乱七八糟的东西?

#include <stdio.h>
#include <string.h>
int main()
{
int n,i,j,p;
char a[80],b[80],m;
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%s",&a[i]);}
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
{if(strcmp(&a[p],&a[j])>0) p=j;}
if(p!=i)
{
m=a[p];
a[p]=a[i];
a[i]=m;
}
}
for(i=0;i<n;i++)
{printf("%s\n",&a[i]);}
system("PAUSE");
}

你把字符a[i]当成字符串了,基础概念问题

#include <string.h>
void main()
{
int n,i,j,p;
string *ss; //定义一个字符串数组,注意是string*,不是string
string str; //选择法排序时交换用的临时字符串
cin>>n;
ss=new string [n]; //申请n个字符串空间
for(i=0;i<n;i++)
cin.get(ss[i]);//输入n个字符串
for(i=0;i<n-1;i++) //选择法排序
{
p=i;
for(j=i+1;j<n;j++)
{
if(strcmp(&ss[p],&ss[j])>0) p=j;}
if(p!=i)
{
str=ss[p];
ss[p]=ss[i];
ss[i]=str;
}
}
for(i=0;i<n;i++) //显示排序后的字符串
cout<<ss[i]<<endl;
}

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

int main()
{
int n,i,j;
char b[80];
char **a;
scanf("%d",&n);
a = (char **)malloc(sizeof(char *) * n);