C_字符串 PK string

          今天天气很好,心情也是很漂亮!!那就让我们继续C++的探讨之旅吧!!

           今天探讨的话题是C_字符串和string的区别~~~~

          我们都知道C语言是面向过程的语言,C++是面向对象的语言,但其兼容了C,在字符串处理方面(这里只讨论字符串)呢,显然C++的string更占据优势(个人感觉),或许有些朋友更青睐于C风格的,完全是个人习惯吧!!好吧,下面我们就来看看他俩是怎样PK的~~~~

           提及字符串,首先我们关注的是如何对字符串进行处理,常见的就是对字符串复制,追加,比较,取长度等等。C是怎样做的,而C++又是怎样处理的呢,我们拭目以待!!

          (1)对字符串的复制(将字符串1复制到字符串2)

            C说:我这样来实现。。

             char str1[10] = "abcdefg";
             char str2[20];            
             strcpy(str2,str1);             //把str1复制到str2中,str1保持不变
             printf("str1 = %s\nstr2 = %s\n ",str1,str2);

 

            C++说:多麻烦啊,看我的!!

             string str1="abcdefg";
             string str2;
             str2 = str1;           //像给变量赋值一样方便
             cout<<"str1 = "<<str1<<endl;
             cout<<"str2 = "<<str2<<endl;

 

           (2)追加字符串(在字符串后面接上另一字符串)

             C说:这个我很OK的!!

              char str1[10] = "abcdefg";
              char str2[20] = "hijklmn";
              strcat(str2,str1);              //将str1追加到str2后面
              printf("str1 = %s\nstr2 = %s\n ",str1,str2);

 

              C++笑了,你还是那么麻烦。。。

               string str1="abcdefg";
               string str2 = "hijklmn";
               str2 += str1 ;            //将str1追加到str2后面,简单的加法
               cout<<"str1 = "<<str1<<endl;
               cout<<"str2 = "<<str2<<endl;

 

              (3)字符串的比较(每一个字符进行比较,大小按字母表顺序)

                 C说:这个我轻松搞定。。

                 char str1[10] = "abcdefg";
                 char str2[20] = "abcdkaa";
                 if(strcmp(str1,str2)==0)          //strcmp返回值是一个整数  str1=str2 返回0  
                          printf("str1 = str2\n");
                else if(strcmp(str1,str2)>0)      //str1>str2,返回大于0的整数
                         printf("str1 > str2\n");
                else
                        printf("str1 < str2\n");        //str1<str2,返回小于0的整数

           注:输出结果为 str1 < str2        因为str1中的e 小于 str2中的k,后面的就不用再做比较了。。

                         

                  C++把代码一放,自己比较去吧,哈哈!!

                 string str1="abcdefg";
                 string str2 = "abcdkaa";
                 if(str2 == str1)
                          cout<<"str1 = str2"<<endl;
                else if(str1 > str2)
                          cout<<"str1 > str2"<<endl;
                else
                          cout<<"str1 < str2"<<endl;

                 结果是一样的。。。

            (4)取字符串的长度

               C说:这个我真的很方便,真的!!

               char str[10] = "abcdefg";
               printf("%d\n",strlen(str));

              

               C++看了,觉得还行。。

                 string str = "abcdefg";
                 cout<<str.size()<<endl;

      好了,经过一番小小的争斗后,是否觉得天气依然那么好呢!! 哈哈,其实还有很多可以一争高下的,这里只是简单的介绍一下字符串几个常见的用法而已。

      都说C++兼容C,那是怎么回事呢,这里就举个例子看一看咯~~~

        char str1[10] ;
        string str2 = "abcdef";
        strcpy(str1,str2.c_str());        //c_str()是将string类型的字符串转化为c_字符串,才能进行复制。。
        cout<<"str1 = "<<str1<<endl;
        cout<<"str2 = "<<str2<<endl;    

        其他情况一样的用法。。。。

 

小结:

         这里还有个很重要的问题说一说,就是数组越界问题,由于编译器没有做数组越界的检查,所以我们在使用数组的时候就必须特别留心,不然可能会造成意想不到的后果~~

         比如说     char str1[10] = "abcdefg";
                         char str2[20] = "hijklmn";
                         strcat(str2,str1);     //如果改为 strcat(str1,str2);   那显然  str1已经不够放那么多字符了(str1只能放10个),这时候也许编译没有出错,运行也没问题,那说明运气好,没有修改到系统一些重要数据,不然,则不知道会发生什么事情!!!

       说完字符数组,再来小结一下string吧。。。

       其实string是一个类,封装了很多方法。。。。类似于比较,加法等说明类中对这些运算符进行了重载,才使得我们使用起来如此的方便,具体的有时间再跟大家继续讨论嘿~~~~~~今天就到这吧!!

         

        如有讲的不对或有所欠缺的,望不吝赐教!!

        如有更好的idea,也可以交流交流!!!

                 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值