鱼C论坛

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

C指针数组 strcmp使用问题

[复制链接]
发表于 2014-1-6 21:49:18 | 显示全部楼层 |阅读模式
5鱼币
  1. #include <stdio.h>
  2. #include <string.h>

  3. void main()
  4. {
  5.       void sort(char *name[], int n);
  6.       void print(char *name[], int n);

  7.       char *name[] = {"Fishc.com", "www.fishc.com", "home.fishc.com", "Fishc.com/dz"};
  8.       int n = 4;

  9.       sort(name, n);
  10.       print(name, n);
  11. }

  12. void sort(char *name[], int n)
  13. {
  14.       char *temp;
  15.       int i, j, k;

  16.       for( i=0; i < n-1; i++ )
  17.       {
  18.             k = i;

  19.             for( j=i+1; j < n; j++ )
  20.             {
  21.                   if( strcmp(name[k], name[j]) > 0 )     //这里的if语句是什么意思啊?
  22.                   {                           //  它里面判断的是name[j]) > 0 ??   不用想就知道是大于0的
  23.                         k = j;       //  那这个  K=J   是干什么用的 /
  24.                   }       // 想好久都没想通,求解答,
  25.                   if( k != i )    //  这里i=0的时候 K貌似也是等于0的    怎么可能== 嘛,
  26.                   {
  27.                         temp = name[i];
  28.                         name[i] = name[k];
  29.                         name[k] = temp;
  30.                   }
  31.             }
  32.       }
  33. }

  34. void print(char *name[], int n)
  35. {
  36.       int i;
  37.      
  38.       for( i=0; i < n; i++ )
  39.       {
  40.             printf("%s\n", name[i]);  //这里是是用数组索引指针值的,  我这句话说的对吗?
  41.       }           
  42. }
复制代码

直接贴代码。

最佳答案

查看完整内容

1.函数简介 原型:extern int strcmp(const char *s1,const char * s2); 所在头文件:string.h 功能:比较字符串s1和s2。 一般形式:strcmp(字符串1,字符串2) 说明: 当s1s2时,返回正数 注意不是1 即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如: "A""A" "computer">"compare" 特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-6 21:49:19 | 显示全部楼层
1.函数简介

原型:extern int strcmp(const char *s1,const char * s2);
所在头文件:string.h
功能:比较字符串s1和s2。
一般形式:strcmp(字符串1,字符串2)
说明:
当s1<s2时,返回为负数 注意不是-1
当s1==s2时,返回值= 0
当s1>s2时,返回正数 注意不是1

即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B" "a">"A" "computer">"compare"
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。

2. k = j;       //  那这个  K=J   是干什么用的 /
这个应该是交换数组元素下标,比如,s1>s2就交换这两个元素的位置

3.if( k != i )  判断是不是同一个数组元素 如果上边的if执行了,那此时k=j
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-1-7 10:53:32 | 显示全部楼层
楼上解释的挺详细了。我帮你推演一下啦
假设你的字符串数组是
char *name[] = {"c", "a", "b"};
第一次循环
i=0,k=0,j=1 name[k]="c" name[j]="a"
那么strcmp("c","a")>0  于是k=1
if哪里k!=i 于是交换位置,现在name[]变成:"a","c","b"

第二次循环
i=1,k=1,j=2 name[k]="c" name[j]="b"
那么strcmp("c","b")>0  于是k=2
if哪里k!=i 于是交换位置,现在name[]变成:"a","b","c"

第三次循环:
i=2 等于n-1 退出循环

搞定排序。






评分

参与人数 1鱼币 +5 贡献 +5 收起 理由
Ъγ:_小ツ雨oο + 5 + 5 谢谢

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 23:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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