
各位C语言的高手们,小弟今个遇到一道:将若干字符串按字母顺序(由小到大)输出,问题在下面
#include<stdio.h>#include(string.h>intmain(){voidsort(char*name[],intn);voidprintf(ch...
#include<stdio.h>
#include(string.h>
int main()
{
void sort(char * name[],int n);
void printf(char *name[],int n);
char * name[]={"Follow me","BASIC",Great Wall","FORTRAN","Computer design"};
int n=5;
sort(name,n);
printf(name,n);
system("pause");
returen 0;
}
void sort(char * name[],int n)
{
int i,j,k;
char * temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(strcmp(name[k],name[j])>0) k=j; /*求各位大侠解释一下这句话的含义啊?name[k]和[j]明明是两个字符串的首地址,为什么可以直接拿来作比较呢*/
}
if (k!=i)
{temp=name[i];name[i]=name[k];name[k]=temp;}
}
}
void printf(char * name[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
return 0;
} 展开
#include(string.h>
int main()
{
void sort(char * name[],int n);
void printf(char *name[],int n);
char * name[]={"Follow me","BASIC",Great Wall","FORTRAN","Computer design"};
int n=5;
sort(name,n);
printf(name,n);
system("pause");
returen 0;
}
void sort(char * name[],int n)
{
int i,j,k;
char * temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(strcmp(name[k],name[j])>0) k=j; /*求各位大侠解释一下这句话的含义啊?name[k]和[j]明明是两个字符串的首地址,为什么可以直接拿来作比较呢*/
}
if (k!=i)
{temp=name[i];name[i]=name[k];name[k]=temp;}
}
}
void printf(char * name[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
return 0;
} 展开
4个回答
展开全部
这个编译应该是对的啊,首先说一下那个字符串数组char * name[]吧,它是一个数组,里面存放的是字符串的首地址,sort(name,n);传递的仍然是数组,只不过数组里存的是指向字符串首地址的指针而已。再说一下你的那个疑问,strcmp(name[k],name[j]),strcmp的参数就是指向字符串的指针啊,比较过程是这样的,先比较每个指针指向的第一个字符,如果不相同则结束比较,如果相同,则都指向下一个字符再比较,知道出现不同字符或遇到结束符时结束,所以你这个函数,通过传递数组里字符串的首地址来比较,进而排序。
不知听懂没有,有问题再追问
不知听懂没有,有问题再追问
更多追问追答
追问
这位大侠小弟想问一下 {temp=name[i];name[i]=name[k];name[k]=temp;}这里交换的是什么变量啊?
追答
交换的是指向字符串的指针,因为数组的成员就是指针,要想交换字符串输出,只需要交换指向字符串的指针就行了。
printf("%s\n",name[i]);从这里你就可以看出name[i]是一个指针,输出的是%s。
展开全部
*name[]是指针数组,数组内的每个元素都是一个指针,指针指向字符串,因此在字符串比较函数中,可以这样引用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说明 你的程序有问题。应该是 *name[k].
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strcmp函数
函数原型 int strcmp (char *str1,char *str2) <参见书本后的C库函数>
因此str1,str2其实是指针变量(字符串的首地址)。注意区别strcmp ( “str1”,“str2”)和strcmp (str1,str2)的不同。前者是字符串的值为str1,str2。后者是字符串的地址为str1,str2。
因此if(strcmp(name[k],name[j])>0) k=j; /*使用指针(地址)*/ 是符合strcmp函数原型的。
不过可以这样使用strcmp ( “China”,“Korea”)。strcmp函数的实参是具体的字符串,而不必是指向字符串的指针。应该是C编译器做了处理,可以识别实参是具体的字符串的情况,进行了指针转换。
函数原型 int strcmp (char *str1,char *str2) <参见书本后的C库函数>
因此str1,str2其实是指针变量(字符串的首地址)。注意区别strcmp ( “str1”,“str2”)和strcmp (str1,str2)的不同。前者是字符串的值为str1,str2。后者是字符串的地址为str1,str2。
因此if(strcmp(name[k],name[j])>0) k=j; /*使用指针(地址)*/ 是符合strcmp函数原型的。
不过可以这样使用strcmp ( “China”,“Korea”)。strcmp函数的实参是具体的字符串,而不必是指向字符串的指针。应该是C编译器做了处理,可以识别实参是具体的字符串的情况,进行了指针转换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询