指针数组学习中的小插曲真是醉了-----Strcmp用法

参考

    1.C++ 从入门到精通第三版;

    2.https://blog.csdn.net/liaoshengshi/article/details/45099923      如是多次被别人转载的地址并未侵权想法,没时间去找到底谁写的。

铺垫:   

    1. 在自学的过程中感觉一本好书真的可以节约很多时间,不幸的是...。。只怪当时随便买了一本还不是vs的编译环境。。。。

    2. 最近几天本来被指针,数组,指针的指针,指针数组搞得把自己学懵了,好不容感觉有了(希望自己有时间和闲心好好总结一番发到自己微博上),准备大开s戒的时候,就被一串代码卡住了,真是心态崩了。。。。

    3. 这个问题可能也只有我这种初学者有,如果下面这段代码的调试结果你完全没有疑问请大神跳过就好!不过还是想记录自己的学习过程。

代码: 

 1 #include <iostream>
 2 using namespace std;
 3 void sort(char *name[],int n)                  // 字符串排序
 4 { 
 5     char *temp;
 6     int i,j,k;
 7     for(i=0;i<n-1;i++)
 8     {
 9         k=i;
10         for(j=i+1;j<n;j++)
11 //下面是自己想验证strcmp()后的结果
12         {
13             cout<< strcmp(name[k],name[j]) << endl;
14             if(strcmp(name[k],name[j])>0) { k=j; cout << "I am more than zero "<< endl; }
15         
16         cout << "name[K]="<<  name[k]<<" "<<"K="<< k<< " "<<"Kaddress:" << name + k  << endl;
17         }
18         if(k!=i)
19         { 
20             temp=name[i];name[i]=name[k];name[k]=temp;
21         }
22     }
23 }
24 void print(char *name[],int n)                  //输出字符串元素
25 { 
26     int i=0;
27     char *p;
28     p=name[0];
29     while(i<n)  
30     {
31         p=*(name+i++);
32         cout<<p<<endl;
33     }
34 }
35 int main( )
36 { 
37     char *name[]={"mingri","soft","C++","mr"};      //定义指针数组
38     int n=4;
39 
40     int m =0;
41 
42     for (m; m< 4; m++)
43 //输出起始地址
44     {
45     cout << "first address:" << name + m<< endl;
46     }
47 
48     sort(name,n);
49     print(name,n);
50     return 0;
51 }
52 
53 /* 
54 结果如下
55 
56 first address:001AFE60
57 first address:001AFE64
58 first address:001AFE68
59 first address:001AFE6C
60 -1
61 name[K]=mingri K=0 Kaddress:001AFE60
62 1
63 I am more than zero
64 name[K]=C++ K=2 Kaddress:001AFE68
65 -1
66 name[K]=C++ K=2 Kaddress:001AFE68
67 1
68 I am more than zero
69 name[K]=mingri K=2 Kaddress:001AFE68
70 -1
71 name[K]=mingri K=2 Kaddress:001AFE68
72 1
73 I am more than zero
74 name[K]=mr K=3 Kaddress:001AFE6C
75 C++
76 mingri
77 mr
78 soft
79 Press any key to continue . . .
80 
81 
82 */


就是对这结果不满意:

            C++
            mingri
            mr
            soft

但对自己刚学的指针知识自认没毛病,如是开启了一大批验证代码尝试,有的在家电脑,一起都是这个结果没毛病啊!

(现在想想可能是自己学了matlab原因C++又不精吧,一直认为strcmp是比较字符串长度的,虽然知道这和matlab返回值是有区别的,也仅知道这些而已)

最后我认为一定是自己对strcmp()函数认识不够造成的;

最终找到一篇令自己豁然开朗的解释:

           strcmp函数是C/C++中基本的函数,它对两个字符串进行比较,然后返回比较结果,函数形式如下: int strcmp(const char* str1, const char* str2); 其中str1和str2可以是字符串常量或者字符串变量,返回值为整形。返回结果如下规定: ① str1小于str2,返回负值或者-1(VC返回-1);                    

② str1等于str2,返回0; ③ str1大于str2,返回正值或者1(VC返回1);

strcmp函数实际上是对字符的ASCII码进行比较,实现原理如下:首先比较两个串的第一个字符,若不相等,则停止比较并得出两个ASCII码大小比较的结果;如果相等就接着 比较第二个字符然后第三个字符等等。无论两个字符串是什么样,strcmp函数最多比较到其中一个字符串遇到结束符'/0'为止,就能得出结果。strcmp算法的可以有多种,不过我觉的可以把这么多算法分为两种,一种是利用减法运算判断结果,另一种是利用比较运算(==)得出结果。

分析:

  这段代码所谓的排序是ASCII码排序:C=67 ,m=109, o=111, r=114, s=115

就是这么简单;结果和我的想法达到了一直,认识了这个概念

 

这里写这么多两点欣喜:

            1. 解决了问题不论问题大小,说明还要多学啊,学海无涯。

            2. 跟自己刚学的指针没冲突,又进了一步。    

 

谢谢观赏!!!       

 

 

   

转载于:https://www.cnblogs.com/MCSFX/p/10268993.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值