C语言,输入5个字符串,按由小到大的顺序输出。非常急,求指导!

2024-11-13 22:08:29
推荐回答(5个)
回答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格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。

如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'\0'。

回答2:

我把scanf_s和strcpy_s改了下就好了。。,你那个拷贝的问题,t数组的长度不够。

长度小于5的话还能用用,大于5的话需要变成t[20]。

/*输入5个字符串,按由小到大的顺序输出。*/
#include
#include
int main(void)
{
    int i,j;
    char a[5][20], t[20];//改大了点,不然字符串太长会超出数组范围
    printf("Enter 5 strings:\n");
    for (i = 0; i < 5; i++)
    {
        scanf("%s",a[i]);
    }
    for (i = 1; i < 5; i++)
    {
        for (j =0; j < 5-i ;j++)
        if (strcmp(a[j], a[j+1]) > 0)
        {
        strcpy(t,a[j]);
        strcpy(a[j], a[j + 1]);
        strcpy(a[j + 1], t);
        }
    }
    printf("After sorted:\n");
    for (i = 0; i < 5; i++)
    puts(a[i]);
    return 0;
}

回答3:

 #include
#include
int main(void)
{
 int i,j;
 char a[5][20], t[20];
 for (i = 0; i < 5; i++){  
  scanf("%s",a[i]);}
  for (i = 1; i < 5; i++){  
   for (j =0; j < 5-i ;j++)  
    if (strcmp(a[j], a[j+1]) > 0){   
     strcpy(t,a[j]);   
     strcpy(a[j],a[j + 1]);   
     strcpy(a[j + 1],t);  
    }
   }
   printf("After sorted:\n");
   for (i = 0; i < 5; i++)
       puts(a[i]);
 return 0;
}

回答4:

scanf_s("%s",a[i]);改成scanf_s("%s",a[i], 20);试试

回答5:

puts(a[i]); //应该用putchar(a[i]) 吧