鱼C论坛

 找回密码
 立即注册
查看: 1135|回复: 2

[已解决]菜鸟之问:关于字符串的排序

[复制链接]
发表于 2020-5-14 15:13:07 | 显示全部楼层 |阅读模式
5鱼币
目的:将五个字符串由大到小排序
  1. #include<stdio.h>
  2. #include<string.h>
  3. void fsort(char cname[][6], int n)
  4. {
  5.         int j, k;
  6.         char *t=&cname[0];
  7.         for (k = 1;k < n;k++) {
  8.                 for(j=0;j<n-k;j++){
  9.                                 if(cname[j]>cname[j+1]){
  10.                                         t = cname[j];
  11.                                         cname[j] = cname[j + 1];//编译器提示这里只能修改左值(一脸懵逼)
  12.                                         cname[j + 1] = t;

  13.                         }
  14.                 }
  15.         }
  16.        

  17. }
  18. void main()
  19. {
  20.         int i;
  21.         char cname[5][6] = { "wang","li","zhang","jin","xian" };
  22.         fsort(cname, 5);
  23.         for (i = 0;i < 5;i++) {
  24.                 printf("%s\n", cname[i]);
  25.         }
  26. }
复制代码

各位大佬帮帮忙啊,看看什么问题啊
最佳答案
2020-5-14 15:13:08
本帖最后由 sunrise085 于 2020-5-14 15:33 编辑

字符串操作就要用字符串函数,你已经导入 string.h 文件了,为什么不用相关库函数?
你所说的那一行的错误是因为字符串不能这样赋值,因为你没有重载'='运算符用于字符串赋值

  1. #include<stdio.h>
  2. #include<string.h>
  3. void fsort(char cname[][6], int n)
  4. {
  5.     int j, k;
  6.     char t[6];
  7.     for (k = 1;k < n;k++) {
  8.         for(j=0;j<n-k;j++){
  9.             if(strcmp(cname[j] , cname[j+1])>0){ //字符串大小比较
  10.                 strcpy(t , cname[j]);   //字符串拷贝赋值
  11.                 strcpy(cname[j] , cname[j + 1]);
  12.                 strcpy(cname[j + 1] , t);
  13.             }
  14.         }
  15.     }
  16. }
  17. void main()
  18. {
  19.     int i;
  20.     char cname[5][6] = { "wang","li","zhang","jin","xian" };
  21.     fsort(cname, 5);
  22.     for (i = 0;i < 5;i++) {
  23.             printf("%s\n", cname[i]);
  24.     }
  25. }
复制代码

最佳答案

查看完整内容

字符串操作就要用字符串函数,你已经导入 string.h 文件了,为什么不用相关库函数? 你所说的那一行的错误是因为字符串不能这样赋值,因为你没有重载'='运算符用于字符串赋值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-14 15:13:08 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-5-14 15:33 编辑

字符串操作就要用字符串函数,你已经导入 string.h 文件了,为什么不用相关库函数?
你所说的那一行的错误是因为字符串不能这样赋值,因为你没有重载'='运算符用于字符串赋值

  1. #include<stdio.h>
  2. #include<string.h>
  3. void fsort(char cname[][6], int n)
  4. {
  5.     int j, k;
  6.     char t[6];
  7.     for (k = 1;k < n;k++) {
  8.         for(j=0;j<n-k;j++){
  9.             if(strcmp(cname[j] , cname[j+1])>0){ //字符串大小比较
  10.                 strcpy(t , cname[j]);   //字符串拷贝赋值
  11.                 strcpy(cname[j] , cname[j + 1]);
  12.                 strcpy(cname[j + 1] , t);
  13.             }
  14.         }
  15.     }
  16. }
  17. void main()
  18. {
  19.     int i;
  20.     char cname[5][6] = { "wang","li","zhang","jin","xian" };
  21.     fsort(cname, 5);
  22.     for (i = 0;i < 5;i++) {
  23.             printf("%s\n", cname[i]);
  24.     }
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-14 15:40:41 | 显示全部楼层
sunrise085 发表于 2020-5-14 15:30
字符串操作就要用字符串函数,你已经导入 string.h 文件了,为什么不用相关库函数?
你所说的那一行的错误 ...

嗯,我一开始想用的strcpy来实现交换,后来又试了下直接用‘=’,然后编译器就报错了,网上查完左值,看的我晕乎乎,‘左值’到底是个什么鬼?不包括数组嘛?_(:з」∠)_
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 17:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表