编写程序,输入10个单词(每个单词小于32字符),将这些单词按升序字母顺序排序输出。
(单词是连续的大小写字母组成,建议在程序中合理使用指针数组)
【注意】输入、输出各占一行,运行效果应如下所示(第1行为输入,第2行为输出,单词间用一个半角空格分隔),格式错误算结果错误。
LIBXL IS A LIBRARY THAT CAN READ AND WRITE EXCEL
A AND CAN EXCEL IS LIBRARY LIBXL READ THAT WRITE
你题目的解答代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void sort(char *a[10],int n)
{
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(strcmp(a[j] , a[j+1])>0)
{
char *t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
int main(){
char *a[10];//使用指针数组
int i,j;
for(i=0;i<10;i++)
{
a[i] = (char *)malloc(sizeof(char)*33); //使用动态内存分配给字符串指针分配空间
scanf("%s", a[i]);
}
sort(a, 10);
for(i=0;i<10;i++)
{
if (i>0)
printf(" ");
printf("%s",a[i]);
}
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
用strcmp排序
#include <stdio.h>
#include <string.h>
int main()
{
char s[10][32],t[32];
char (*p)[32] = s;
int i=0,j;
for(i=0;i<10;i++)
scanf("%s",p+i);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
{
if(strcmp(*(p+j),*(p+j+1)) > 0)
{
strcpy(t,*(p+j));
strcpy(*(p+j),*(p+j+1));
strcpy(*(p+j+1),t);
}
}
for(i=0;i<10;i++)
printf("%s ",p+i);
return 0;
}