猿问

c语言指针与数组的问题求解

#include<stdio.h>
#include<string.h>
#define MAX_LEN 10
#define N 150
void sortstring(char *ptr[],int n);
void swap(char *ptr1,char *ptr2);
int main()
{
	int i,n;
	char name[N][MAX_LEN];
	char*pstr[N];
	printf("how many countries?:");
	scanf("%d",&n);
	getchar();
	printf("input their names\n");
	for(i=0;i<n;i++)
	{
		pstr[i]=name[i];
		gets(pstr[i]);
	}
	sortstring(pstr,n);
	printf("after sorted\n");
	for(i=0;i<n;i++)
	{
		puts(pstr[i]);
	}
	return 0;
}

void sortstring(char *ptr[],int n)
{
	int i,j;char *temp=NULL;
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(strcmp(ptr[j],ptr[i])<0)
			{
				swap(ptr[j],ptr[i]);
			}
		}
	}
}

void swap(char *ptr1,char *ptr2)
{
	char temp;
	temp=*ptr1;
	*ptr1=*ptr2;
	*ptr2=temp;
}

运行结果如图,程序的目的是想按字典顺序排列国家的名字,我编的程序问题在于只交换了第一个字母,而不是交换指向字符串的指针,不是通过数组的首地址可以调用出数组元素吗,那为什么还是只交换一个字母,问题到底出在哪里?求详细解答!

http://img.mukewang.com/583aea150001dabf11470972.jpg

Leo也叫做夹子
浏览 1791回答 3
3回答

Object_is_null

void swap(char *ptr1,char *ptr2){     char temp[N];     strcpy(temp,ptr1);     strcpy(ptr1,ptr2);     strcpy(ptr2,temp);}//用一个字符数组做中间变量

qq_一尾沉默的鱼_0

把swap函数中的temp都换成*temp试试。char只能定义一个字符,不能操作字符串。
随时随地看视频慕课网APP
我要回答