在C++中使用String类,首先要#include <string>
很多人初学C++可能更为熟悉C语言中对于字符串的操作,但是其实C++中的String类更加方便快捷。
有关String类的创建(重点)
常规方式
1 | string test1 = "abc"; //调用了String类的构造函数 |
在进行输出时,直接输出即可,编译器知道哪一个对象是String类对象,会从字符串的首地址一直输出到’\0’停止。
1 | cout << test1 << endl; |
特殊方式
1 | string* test5 = new string("abcdef");//test5指向一个只有一个单元的字符串数组,这个单元里面存储的是abcdef中a的地址 |
这个地方其实test5,test6这两个String指针指向的其实是一个内部是存储字符串的数组,这个数组里面存储了一个地址,这个地址指向存储的字符串的首字符,换句话说,这个数组里面的每一个单元存储的是一个字符串的首地址。所以在某种程度上,test5和test6可以看成是一个二维数组。
所以我们看一下输出的情况:
1 | cout << test5[0] << endl; //输出abcdef,相当于输出test5指向的字符串数组中的第一个单元格中的字符串,编译器自动识别第一个单元格中的内容是abcedf字符串的首字符a的地址,输出时会直接输出整个字符串abcdef |
1 | cout << test6[0] << endl; //输出123 |
注意:如果创建的类中的成员变量的类型有String*,必须要有析构函数,并用delete[]析构掉
如果创建的类中的成员变量类型只是String,那么可以不必用析构函数,因为系统会自动析构
String类的一些方法(常用)
获取字符串长度
用size()或者length()函数
1 | string str = "abcdef"; |
注意:在使用C语言的字符串时,需要时时刻刻想着字符串的末尾有一个’\0’,在创建字符串的时候还需要多留一个位置给’\0’。但是在应用String类的时候,不需要考虑’\0’,虽然字符串的末尾依然是以’\0’结尾的,但这是String类自动加上的,在计算字符串长度或者创建字符串时都不需要考虑。
字符串比较(比较字符串中字符ASCII码的大小)
String类重载了<, >, ==, !=, <=, >=
等比较运算符,可以直接使用
字符串的连接
String类重载了+,+=
等运算符,可以直接使用。append()
函数等价于+=
运算符
1 | test_connect = test1 + test2; //test_connect为abcefg |
字符插入字符串
push_back(char)
是在字符串尾部插入单个字符
insert(int position, char)
函数可以在字符串指定位置插入字符
字符串删除字符
pop_back()
函数是删除字符串末尾的元素
erase(int position1, int position2)
函数可以删除在两个指定位置之间的字符串
erase(string::iterator itr)
函数可以删除在itr指向的位置的元素,删除后,删除位置后面的所有元素都前移一个位置
erase(string::iterator itr1, string::iterator itr2)
函数删除itr1和itr2之间的元素
字符串查找
find()
函数可以查找指定字符或者字符串在整个字符串中的索引位置
字符串的迭代器
C++中的String类是有迭代器的,语法格式为:
1 | string str = "abcdefg"; |
注意:一定要注意end()函数返回的指针指向的是字符串中最后一个元素的下一个地址
以上只是最常用的String类的一些语法,欢迎交流。