当前位置:   article > 正文

7-1 字符串排序

7-1 字符串排序

7-1 字符串排序

输入n个字符串(n<=10,每个字符串长度均小于20),按照从小到大的顺序输出这些字符串。

输入格式:

第一行输入一个整数n;接下来的n行输入n个字符串。

输出格式:

输出n个字符串,每行1个串。

输入样例:

在这里给出一组输入。例如:

  1. 5
  2. China
  3. Mongolia
  4. Korea
  5. Japan
  6. Philippines

输出样例:

在这里给出相应的输出。例如:

  1. China
  2. Japan
  3. Korea
  4. Mongolia
  5. Philippines

个人思路:

题目要求输入n个字符串,首先我们需要输入一个n的值 ,但是如何输入n的字符串呢?

输入一个字符串可以写成char s[]这里表示输一个字符串,s[]在这里确实就是一个指针,s[]就是一个指向字符串s的首个数组的地址,那如果是n个字符串就可以写成:s[n][20]这样来表示,后面写20是因为题目说明了字符串不会超过20.

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n;
  5. scanf("%d\n",&n);
  6. char s[n][20];
  7. }

然后在输入每一个字符串下面是错误示范:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n;
  5. scanf("%d\n",&n);
  6. char s[n][20];
  7. for(int i=0;i<n;i++)
  8. {
  9. gets(s[i][20]);
  10. }
  11. }

在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]);

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. int n;
  6. scanf("%d\n",&n);
  7. char s[n][20];
  8. for(int i=0;i<n;i++)
  9. {
  10. gets(s[i]);
  11. }

成功存取全部字符串以后就可以用数组来比较他们之间的大小了,字符串之间的比较这里直接用c语言里的一个库函数strcmp,这里需要引入头文件:string.h

strcmp(s1, s2); 如果s1=s2那么就返回0,如果s1大返回1,s2大就返回-1。

下面我采用的是冒泡排序

   完整代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. int n;
  6. scanf("%d\n",&n);
  7. char s[n][20];
  8. for(int i=0;i<n;i++)
  9. {
  10. gets(s[i]);
  11. }
  12. for(int i=0;i<n-1;i++)
  13. {
  14. for(int j=0;j<n-1-i;j++)
  15. {
  16. if(strcmp(s[j],s[j+1])>0)
  17. {
  18. char t[20];
  19. strcpy(t,s[j]);
  20. strcpy(s[j],s[j+1]);
  21. strcpy(s[j+1],t);
  22. }
  23. }
  24. }
  25. for(int i=0;i<n;i++)
  26. {
  27. printf("%s\n",s[i]);
  28. }
  29. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/651322
推荐阅读
相关标签
  

闽ICP备14008679号