《C++ Primer》学习之string

来源:互联网 发布:有名的软件供应商 编辑:程序博客网 时间:2024/06/09 20:51

以前看关于C++的书籍的时候,没有太多的去关注string的细节问题,因为平时用的基本都是关于string的都是类型之间的转换,把它当作一个字符数组来用。在C++ primer中对string进行了重点强调,仔细一点学习,有了很多新发现,这里记录一下,也许以后用到的时候会少返点错误。

初始化:string初始化的时候以前会犯这样的错误。。。就是声明了一个string 变量,然后需要它为空,就手动给其再初始化一次。其实string是个类类型,在定义的时候会调用其默认的构造函数(没有手动初始化的时候),这个构造函数会自动将此string变量初始化为空串。

string s1;

string s2(s1);

sting s3("value");

string s4(n,"c");

string s5(s3.begain(),s3.begain() + s3.size/2);

char*cp = "HiYa";

char c_array[] = "World!!!";

char no_null[] = {'H','i'};

string s6(cp);

string s7(c_array,5);

string s8(c_array+5,4);

string s9(no_null);//runtime error:no_null not null_terminated.使用这种格式的时候字,必须包含null结束字符,在字符数组中没有null这种错误是很严重的,而且无法检测

string s5(no_null,2);//指定格式,只要这个长度小于字符数组的中字符个数就行了,其只需要取到指定个数的字符即可,不需要null终止字符。

这几种方式都是可以的。

string读取:这个比较基本,只要记住读取时,忽略所有开头的空白符。再次遇到空白符的时候终止。所谓空白符包括空格,换行符,制表符

字符串和字面值的连接:s1 + "hello",前面s1为字符串, "hello"为字面值。这时候有些地方需要注意,当进行string对象和字符串面值混合连接时,+ 操作符左右两端必须有一个string类型。其中最关键的是两个字面值不能连接,然后赋值给字符串变量。下面几种情况可以清除的得出结论。

string s1("hello");

sting s2("world");

string s3 = s1 + " ," +s2 + "\n";

string s4 = s1 + ",";

string s5 = "hello" + ",";               //这里是错误的,两个字面值不能连接

string s6 = s1 + "," + "world";    //这里是可以的,可以分成两部分,s1+","的到一个string temp,然后s6 = temp  + "world";

string s7 = "hello" + "," + s2;     //这里不行的,前两个都是字面值,不能直接连接

从string中获取字符,可以用索引值下表,跟普通的数组一样,很简单,只有一点要注意一下,在使用索引值的时候,最好用size_type,其为unsigned类型。这样就不用考虑其下标小于0的情况来了,防止出错。

string中一些字符的处理,string中封装了很多对于字符的操作函数,比如判断字符的类型,字母还是整形,标点,空白符等,这些可能比较常用,很多时候会避免自己去写一些比较搓的算法去判断。呵呵,yy。


温馨小tip:C标准库头文件命名形式name.h ,在C++中使用的cname。前面加C表示此标准库源于c标准库。



0 0
原创粉丝点击