C_字符串 PK string
来源:互联网 发布:单片机最小系统能干嘛 编辑:程序博客网 时间:2024/06/10 17:21
今天天气很好,心情也是很漂亮!!那就让我们继续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,也可以交流交流!!!
- C_字符串 PK string
- c_字符串_从string对象中去掉标点符号
- string PK CString
- C_串----基本string字符系列容器
- java基础--StringBuffer pk String
- c_二维数组,字符串数组,多维数组
- c_二维数组,字符串数组,多维数组
- C_标准函数库中的字符串处理函数
- JavaScript中,String和StringBuffer性能PK
- C_二维数组, 字符串数组, 及多维数组
- C_实现字符串截取函数left、mid和right
- PK字符串匹配(C语言)
- 字符串string
- string字符串
- String字符串
- String字符串
- String字符串
- 字符串String
- 关于搜索框设计技巧
- 常用的安全CRT函数
- Android复写BaseAdapter并显示ListView视图
- 工欲善其事,必先利其器
- Flex3 实战 10章 事件
- C_字符串 PK string
- LINQ查询技术
- How:程序与文件之间的信息传递实现(File I/O)
- 织梦(dede)注册会员时增加字段
- Java 数字输入的一个bug
- Bionic C Library Overview
- DataGridViewRow的Remove 与 DataRow的Remove区别
- hdoj 3035 War
- 大众点评面试题