注册 登录
编程论坛 C++教室

[求助]如何把2维字符串数组的实参带给行参

syclee 发布于 2007-07-31 23:09, 813 次点击
题目是:用指针数组编写一个函数,用于将5个预定义的国家名排序,在main函数中调用该函数完成排序,并输出排序前后的信息
我写的是:
#include <stdio.h>
#include <string.h>
void sort(char *[]);
void main()
{
char str[5][20];
int i;
printf("请输入5个国家的名字:\n");
for(i=0;i<5;i++)
{
fflush(stdin);
gets(str[i]);
}
sort();//我的问题是 我现在这里怎么吧实参带给行参
}
void sort(char *name[])
{
int j,i;
char dummy[20];
for(i=1;i<5;i++,name++)
{
for(j=1;j<=5-i;j++)
{
if(strcmp(name[j-1],name[j])>0)
{
strcpy(dummy,name[j-1]);
strcpy(name[j-1],name[j]);
strcpy(name[j],dummy);
}
}
}
for(i=0;i<5;i++)
printf("%s\n",name[i]);
}
6 回复
#2
leeco2007-07-31 23:34
类型不一致,没办法传
你可以再定义一个char *数组,分别赋值为str[0],str[1],...,然后再传。
#3
syclee2007-07-31 23:37

你的意思是不是 我这里应该定义为
char str[20];
char *str[5];

#4
syclee2007-07-31 23:38

循环的把 gets(str) 付给 指针?

#5
medicihophy2007-08-01 14:26

#include <stdio.h>
#include <string.h>
void sort(char **);
void main()
{
char str[5][20];
char* mystring[5];
for(int i=0;i<5;i++)
{
mystring[i]=str[i];
}
printf("请输入5个国家的名字:\n");
for(i=0;i<5;i++)
{
gets(str[i]);
}
sort(mystring);//我的问题是 我现在这里怎么吧实参带给行参
}
void sort(char **name)
{
int i,j;
char dummy[20];
for(i=1;i<5;i++)
{
for(j=1;j<=5-i;j++)
{
if(strcmp(*(name+j-1),*(name+j))>0)
{
strcpy(dummy,*(name+j-1));
strcpy(*(name+j-1),*(name+j));
strcpy(*(name+j),dummy);
}
}
}
for(i=0;i<5;i++)
printf("%s\n",*(name+i));
}

这样改就可以得出结果了,不过好像不是很好啊!

#6
野比2007-08-02 00:23
用一个5长度的指针数组...分别指向各字符串.
#7
virusplayer2007-08-02 09:17
还是版主厉害啊
用指针数组代替二维数组接收各字符串
1