一道C语言程序题,在线等答案!

来源:百度知道 编辑:UC知道 时间:2024/06/04 03:11:30
题目:输入四个字符串,使用指向指针的指针将这四个船从小到大排列后依次输出。
书上给的答案是这样的:
#include <stdio.h>
#include <string.h>
main()
{
char str[4][20];
char *p[4],**pp=p,*temp;
int i,j;
for(i=0;i<4;i++)
{ p[i]=str[i];
printf("Input the NO.%d string:",i+1);
scanf("%s",p[i]);
}
for(i=0;i<3;i++)
for(j=0;j<3-i;j++)
if(strcmp(pp[j],pp[j+1])>0)
{ temp=pp[j];
pp[j]=pp[j+1];
pp[i+1]=temp;
}
for(i=0;i<4;i++)
printf("%s ",pp[i]);
printf("\n");
}
编译运行,输入what is your name,运行结果为is name your name
输入go your own way,运行结果为go own your way
-----------结果显然不对,请问问题出在哪?------------

这是我自己用指向数组的指针写的程序:
#include <stdio.h>
#include <string.h>
main()
{ char str[4][20];/*必须先定义一个确定的数组*/
char *a[

你自己的是对的啊.
要对自己有信心.
#include <stdio.h>
#include <string.h>
main()
{
char str[4][20];
char *p[4],**pp=p,*temp;
int i,j;
for(i=0;i<4;i++)
{ p[i]=str[i];
printf("Input the NO.%d string:",i+1);
scanf("%s",p[i]);
}

for(i=0;i<3;i++)
for(j=i+1;j<4;j++) /*改了这里.*/
if(strcmp(pp[i],pp[j])>0)
{ temp=pp[i];
pp[i]=pp[j]; /*改了这里.*/
pp[j]=temp;
}
for(i=0;i<4;i++)
printf("%s ",pp[i]);
printf("\n");

getch();
return;
}

己经验证过了,正确

我知道了。。。
#include <stdio.h>
#include <string.h>
main()
{
char str[4][20];
char *p[4],**pp=p,*temp;
int i,j;
for(i=0;i<4;i++)
{ p[i]=str[i];
printf("Input the NO.%d string:",i+1);
scanf("%s",p[i]);
}
for(i=0;i<3;i++)
for(j