赞
踩
7-1 字符串排序
输入n个字符串(n<=10,每个字符串长度均小于20),按照从小到大的顺序输出这些字符串。
第一行输入一个整数n;接下来的n行输入n个字符串。
输出n个字符串,每行1个串。
在这里给出一组输入。例如:
- 5
- China
- Mongolia
- Korea
- Japan
- Philippines
-
在这里给出相应的输出。例如:
- China
- Japan
- Korea
- Mongolia
- Philippines
题目要求输入n个字符串,首先我们需要输入一个n的值 ,但是如何输入n的字符串呢?
输入一个字符串可以写成char s[]这里表示输一个字符串,s[]在这里确实就是一个指针,s[]就是一个指向字符串s的首个数组的地址,那如果是n个字符串就可以写成:s[n][20]这样来表示,后面写20是因为题目说明了字符串不会超过20.
- #include<stdio.h>
- int main()
- {
- int n;
- scanf("%d\n",&n);
- char s[n][20];
-
- }
然后在输入每一个字符串下面是错误示范:
- #include<stdio.h>
- int main()
- {
- int n;
- scanf("%d\n",&n);
- char s[n][20];
- for(int i=0;i<n;i++)
- {
- gets(s[i][20]);
- }
- }
在C语言中,二维字符数组s[n][20]
表示一个包含n个字符串的数组,每个字符串的最大长度为20。当我们使用s[i]
时,它表示第i个字符串,而s[i]
本身就是一个指向该字符串的指针。
因此,在gets(s[i]);
语句中,我们应该使用s[i]
,而不是s[i][20]
。因为s[i]
本身就是一个指向字符串的指针,gets;
会将输入的字符串存储到s[i]
指向的位置。
所以,gets
语句应该是gets(s[i]);
而不是gets(s[i][20]);
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- int n;
- scanf("%d\n",&n);
- char s[n][20];
- for(int i=0;i<n;i++)
- {
-
- gets(s[i]);
- }
成功存取全部字符串以后就可以用数组来比较他们之间的大小了,字符串之间的比较这里直接用c语言里的一个库函数strcmp,这里需要引入头文件:string.h
strcmp(s1, s2); 如果s1=s2那么就返回0,如果s1大返回1,s2大就返回-1。
下面我采用的是冒泡排序
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- int n;
- scanf("%d\n",&n);
- char s[n][20];
- for(int i=0;i<n;i++)
- {
-
- gets(s[i]);
- }
- for(int i=0;i<n-1;i++)
- {
- for(int j=0;j<n-1-i;j++)
- {
- if(strcmp(s[j],s[j+1])>0)
- {
- char t[20];
- strcpy(t,s[j]);
- strcpy(s[j],s[j+1]);
- strcpy(s[j+1],t);
-
-
- }
- }
- }
- for(int i=0;i<n;i++)
- {
- printf("%s\n",s[i]);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。