【问题描述】
编写程序,输入n(n≤1000)个字符串,将n个字符串排序后输出。字符串的长度小于100。
【输入形式】
第1行为整数n,接下来n行,每行为一个字符串。
【输出形式】
n行,排序后的字符串。
【样例输入】
5
Java Programming
C Programming
PHP
HTML
Pascal
【样例输出】
C Programming
HTML
Java Programming
PHP
Pascal
【样例说明】
注意:整数5后有一个回车。
需要思考解决问题的步骤
1.字符串输入字符能一个个读且换行
2.怎么比较首字母并交换
3.字符输出
然后思考对应函数
1.scanf和gets,一起用要记得getchar()吸收掉scanf输入后的回车
2.strcmp比较两个字符串 <只能比一维数组>
//(设这两个字符串为str1,str2,
//str1==str2,则返回零;
//str1 > str2,则返回正数;
//str1< str2,则返回负数。
//对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。
//如果全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。)
strcpy交换
3.puts会自动换行
正式代码
#include<stdio.h>
#include<string.h>
int main()
{char exchange(char m[][100],int n);//二维数组传参只能一维不写
int n,i;
char m[100][100]={0}; //字符数组必须自定义好0这样之后自动遇0停
scanf("%d",&n);
getchar();
//方法一直接在scanf内要求,scanf("%d\n",&n); 已经把最后的回车当成输入的一部分
//方法2.scanf输入后有一个回车产生的空格需要吸收
//不然会自动放进后面的gets (scanf与gets的恩怨关系)
for(i=0;i<n;i++)
gets(m[i]); //1.gets(内为数组名)
exchange(m,n); //2.进函数来完成
for(i=0;i<n;i++)
{
puts(m[i]);
//puts()在输出字符串时会将’0’自动转换成’n’进行输出,
//也就是说,puts方法输出完字符串后会自动换行。与语句printf("%s\n",s);的作用相同
}
return 0;
}
char exchange(char m[][100],int n)
{
int i,j;
char b[100]={0};
for(j=1;j<=n+1;j++) //起泡法
{ for(i=0;i<=n-j-1;i++)//因为上面的数组是从0开始输入,这里也要从0开始比较不然会漏掉m[0]没比
{
if(strcmp(m[i],m[i+1])>0)
{
strcpy(b,m[i]);
strcpy(m[i],m[i+1]);
strcpy(m[i+1],b);
}
}
}
}