编写程序,对输入的若干单词按词典排序,不区分大小写。要求字符串的比较、复制、大小写转换、排序等工作均用函数实现(注意是自己编写函数,不能使用系统的字符串处理库函数)。
在主函数中输入单词,调用函数排序,在主函数中输出结果。字符串个数不超过100个,每个单词的长度不超过20。
输入格式:
两行:第1行为单词个数n,第2行为n个单词,用空格隔开。
输出格式:
n行,每行一个单词。
输入样例:
5
sin Cos log exp sqrt
输出样例:
Cos
exp
log
sin
sqrt
我写的没有输出,求帮忙改一哈
c代码如下# include <stdio.h>
int main()
{
int i,j,n;
char d;
char arr[50][20];
void order(char*a[50][20],int n);
scanf("%d\n",&n);
for(i=0;i<50;i++)//每个元素都取'0'
{
for(j=0;j<20;j++)
{
arr[i][j]='0';
}
}
for(i=0;i<50;i++)//输入字符串,并存为每一行一个字符串
{
for(j=0;j<20;j++)
{
scanf("%c",&arr[i][j]);
d=arr[i][j];
if(d==' '||d=='\n')
{
arr[i][j]='\0';
break;
}
else
arr[i][j]=d;
}
if(d=='\n')
break;
}
order(arr[50][20],n);
for (i=0;i<n;i++)
{
for (j=0;j<20;j++)
{
if(arr[i][j]=='0')
{
printf("\n");
}
else
printf("%c",arr[i][j]);
}
}
return 0;
}
void order(char*a[50][20],int n)
{
int i,j,k,m;
char t;
for (i=0;i<n;i++)//遍历每一行的字符串
{
for (k=0;k<n;k++)//遍历每一行的字符串与第i个比较
{
for (j=0;j<20;j++)//遍历每一个字符串的字符
{
if(a[i][j]>='A'&& a[i][j]<='Z'&&a[k][j]>='a'&& a[k][j]<='z')//第i行的字符串某个字符是大写;k行的相应位置字符是小写
{
if(a[i][j]+32==a[k][j])
{
continue;
}
if(a[i][j]+32>a[k][j])//前者比后者大
{
for(m=0;m<20;m++)// 交换
{
t=a[k][m];
a[k][m]=a[i][m];
a[i][m]=t;
}
}
}
if(a[i][j]>='a'&& a[i][j]<='z'&&a[k][j]>='A'&& a[k][j]<='Z')//第i行的字符串某个字符是小写;k行的相应位置字符是大写
{
if(a[i][j]==a[k][j]+32)
{
continue;
}
if(a[i][j]>a[k][j]+32)
{
for(m=0;m<20;m++)
{
t=a[k][m];
a[k][m]=a[i][m];
a[i][m]=t;
}
}
}
else//小写与小写,大写与大写的情况
{
if(a[i][j]==a[k][j])
{
continue;
}
if(a[i][j]>a[k][j])
{
for(m=0;m<20;m++)
{
t=a[k][m];
a[k][m]=a[i][m];
a[i][m]=t;
}
}
}
}
}
}
}