原题:输入 10 个字符串,然后排序输出。排序的原则由键盘输入的数来决定,若为 0,则将 输入的字符串按整数值大小由小到大排序,否则按字典顺序
-排序(不区分大小写。要求:输入、输出、排序 分别用函数实现,主函数只是调用这些函数。
代码
- 问题:在第二种不区分大小写排序中,最后几个字符串无法实现排序。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void input(char (*p)[30], int n, int *p1);
void output(char (*p)[30], int n);
void sort1(char(*p)[30], int n);
void sort2(char(*p)[30], int n);
void main()
{
int value=0;
char str[10][30];
printf("please input the value,determining the method of string sorting.\n");
scanf("%d",&value);
input(str,10,&value);
output(str,10);
}
void input(char(*p)[30],int n,int *p1)
{ int i;
printf("please input %d character strings\n",n);
for(i=0;i<n;i++)
{
malloc(sizeof(char) * 30);
scanf("%s",p[i]);
}
if(*p1==0)
{
sort1(p,10);
}
else
{
sort2(p,10);
}
}
void sort1(char(*p)[30], int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(p[i],p[j])>0)
{
char * temp;
strcpy(temp,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],temp);
}
}
}
}
void sort2(char(*p)[30],int n)
{
int i,j;
char copy[10][30];
for(i=0;i<n;i++)
{
malloc(sizeof(char) * 30);
strcpy(copy[i],p[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<30;j++)
{
if(copy[i][j]>='a'&©[i][j]<='z')
{
copy[i][j]-=32;
}
}
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(copy[i],copy[j])>0)
{
char temp[30];
strcpy(temp,p[i]);
strcpy(p[i],p[j]);
strcpy(p[j],temp);
}
}
}
}
void output(char (*p)[30], int n)
{ int i;
printf("now showcase the sorted strings.\n");
for(i=0;i<n;i++)
{
printf("%s\n",p[i]);
}
}