当前位置:   article > 正文

C语言实现输入 n 个字符串,将它们按字母由小到大的顺序排列并输出_字符串排序:输入n个字符串,按从小到大的顺序输出

字符串排序:输入n个字符串,按从小到大的顺序输出

完整代码:

  1. // 输入 n 个字符串,将它们按字母由小到大的顺序排列并输出
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. //字符串的最大长度
  5. #define N 20
  6. //交换两个字符串在数组中的位置
  7. void swap(char **str1,char **str2){
  8. char *temp=*str1;
  9. *str1=*str2;
  10. *str2=temp;
  11. }
  12. //比较字符串大小
  13. int my_strcmp(char *str1, char *str2) {
  14. //当字符相差为0时且两个字符不同时为'\0'(字符串结尾),此时两个字符相等,移动到下一个字符继续比较
  15. while (*str1 != '\0' && *str2 != '\0' && *str1 == *str2) {
  16. str1++;
  17. str2++;
  18. }
  19. return *str1 - *str2;
  20. }
  21. //冒泡排序
  22. void sort(char **str,int n){
  23. for (int i = 0; i < n; i++)
  24. {
  25. for (int j = 0; j < n-i-1; j++)
  26. {
  27. //较大的字符串往数组上面移动
  28. if (my_strcmp(str[j],str[j+1])>0)
  29. {
  30. swap(&str[j],&str[j+1]);
  31. }
  32. }
  33. }
  34. }
  35. int main(){
  36. int n;
  37. printf("请输入字符串个数n:");
  38. scanf("%d",&n);
  39. //读取缓冲区的回车字符
  40. getchar();
  41. //动态分配空间存储字符串数组,就是分配有n个字符串的数组
  42. char **str=(char**)malloc(n*sizeof(char*));
  43. for (int i = 0; i < n; i++)
  44. {
  45. //分配数组中每个字符串的空间,就是字符串中能有多少个字符
  46. str[i]=(char *) malloc(N * sizeof(char));
  47. printf("请输入第%d个字符串\n",i+1);
  48. gets(str[i]);
  49. }
  50. printf("排序前字符串为:\n");
  51. for (int j = 0; j < n; j++)
  52. {
  53. printf("%s\n",str[j]);
  54. }
  55. sort(str,n);
  56. printf("排序后字符串为:\n");
  57. for (int j = 0; j < n; j++)
  58. {
  59. printf("%s\n",str[j]);
  60. }
  61. for (int j = 0; j < n; j++)
  62. {
  63. //先释放字符串所占的空间
  64. free(str[j]);
  65. }
  66. //最后释放字符串数组占用的空间
  67. free(str);
  68. return 0;
  69. }

运行截图:

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

闽ICP备14008679号