帮忙编个程序,题目要求是:用指向指针的指针的方法对5个字符串排序并输出。

2024-12-05 05:25:32
推荐回答(4个)
回答(1):

#define _CRT_SECURE_NO_WARNINGS 1

#include

#include

#include

void sort(char **p)

{

char **q, **s, *t;

for (q = p; q < p + 4; q++)

{

for (s = q + 1; s < p + 5; s++)

{

if (strcmp(*q, *s) > 0)

{

t = *q;

*q = *s;

*s = t;

}}

}

}

int main()

{

char *a[5], b[5][99], **p;

int i;

for (i = 0; i < 5; i++)

a[i] = b[i];

printf("请依次输入五个字符串:\n");

for (i = 0; i < 5; i++)

scanf("%s", a[i]);

p = a;

sort(p);

printf("排序后输出为:\n");

for (i = 0; i < 5; i++)

{

printf("%s\n", a[i]);

}

system("pause");

return 0;

}

运行效果:

扩展资料:

scanf()函数用法:

输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&。

scanf("%s",s);改为scanf("%s",&s);

scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二);

格式控制字符串包含:格式控制说明,普通字符。

1、格式控制字符串表示输入的格式,(int型用%d,float用%f,double型用%lf)

2、普通字符:在输出数据的时候,按照原样输出的字符,如:"fahr=%d,celsius=%d\n"中的fahr=,celsius=。

3、输入的参数是变量的地址,所以要在变量前面加&。

回答(2):

#include
#include
int main()
{
char str[5][30],temp[30],(*p)[30];
int i,j,k,n=5;
printf("请输入五个字符串:\n");
for(i=0;i gets(str[i]);
p=str;
for(i=0;i {k=i;
for(j=i+1;j if(strcmp(*(p+k),*(p+j))>0)
k=j;
if(k!=i)
{strcpy(temp,*(p+i));
strcpy(*(p+i),*(p+k));
strcpy(*(p+k),temp);}
}
printf("排序后的五个字符串:\n");
for(i=0;i printf("%s\n",*(p+i));
return 0;
}

回答(3):

#include
#include
void f1(char a[5][500])//用于排序的函数
{
char *p[5],**pp;
int i, j, k = 0;
char t;
for (i = 0; i < 5; i++)
p[i] = a[i];
pp=p;
for (i = 0; i<4; i++)
for (j = 0; j < 4 - i; j++)
{
if (strcmp(a[j], a[j + 1]) > 0)
{
for (k = 0; k < 500; k++)
{
t = *(a[j] + k);
*(*(pp + j) + k) = *(*(pp+j+1) + k);//对指针的指针进行操作
*(*(pp + j + 1) + k) = t;
}
}
}
}
void f2(char a[5][500])//用于输入的函数
{
int i;
for (i = 0; i < 5; i++)
gets(a[i]);
}
int main()
{
char a[5][500], *p[5];
int i;
f2(a);
f1(a);
for (i = 0; i < 5; i++)
puts(a[i]);
return 0;
}

//源程序是八个字符串,八个五个都一样

回答(4):