为了理解C++ string类的必要性,需要考虑C风格字符串的优势和劣势。
优势:
- 很简单,底层使用了基本的字符类型和数组结构。
- 量级轻,如果使用得当,只会占有所需的内存。
- 很低级,因此可以按操作原始内存的方式轻松操作和复制字符串。
- 能够很好地被C语言理解——为什么还要学习新事物?
劣势: - 为了模拟一等字符串数据类型,需要付出很多努力。
- 使用难度大,而且很容易产生难以找到的内存BUG。
- 没有利用C++的面向对象特性。
- 要求程序员了解底层的表示方式。
以上来自C++高级编程第三版。
-
string str1("abcd");
-
string str2(5, 'a');
复制5个a,注意使用单引号。而有趣的是string str2(5,'abc');则会出现5个c; -
string str3("abcdefghijk",3);
str3取abc; -
string str4 ( "abcdefghijk",3,5);
从第4个字符开始取5个字符,不足4个字符取空,多过4个少于9个时从第4个到最后一个。 -
string str = "abcdefghijk";
str.substr(3,5);//与上面类似
注:对于原始字符串来说
string str = "Hello "World"!";
string str = R"(Hello "World"!)"
那么对于字符中出现)"这个字符可以使用以下方式
string str =R"-(the characters )" are......)-" -
string str2(str1)
-
string str1 = "abc";string str2 = str;
-
assign用于赋值,拷贝的string的类函数
string str1("abcdefgh");string str2;
str2.assign(str1,3);//取前三个字符赋值给 str2
str2.assign(str1,3,2);//取第三之后的2个字符 -
string str ="abcdefg";
char ch1 = str[2]; -
char ch2 = str.at(2);//越界后,能够抛出异常被捕获
-
修改字符
str[3]='z';
str.at(4)='x';
我觉得还是该多注意单引号和双引号
string常用的类函数
-
int lenth =str.length();//返回字符串长度,不包含‘\0'
-
int strSize = str.size();//同length
-
bool flag = str.empty();//判断是否为空
-
compare比较字符,按照字典顺序,比较大小,大于返回1,小于返回-1;等于返回0;
string str1 ="abc";
string str2 = "xyz"
char *ch = "omg";
int i =str2.compare(str1);
int j = str2.compare(ch); -
字符串的增
str+=str1;
str+=ch;
str.append("xyz");
str.append("xyz",3);
str.append("xyz",1,2);//在字符后面添加了xy -
字符串的插入
str.insert(1,"xxx");
str.insert(1,str1);
str.insert(1,3,'x');//复制3个x增加在第一位后面,注意单引号 -
字符串的删除
str.erase(2,3)//从第三位开始删除3个字符 -
字符串的替换
str.replace(1,2,"-------");//从第1个后面的2个字符替换-------; -
字符串的交换
swap(str1,str2);
str.swap(str2);
-字符串的查找
str.find('c');//寻找c的位置,如果没有寻找到则赋值为-1;
str.find('c',2);//从下标为2开始寻找c,如果没有寻找到则赋值为-1;
str.find(ch);
关于查找函数可以看
http://blog.csdn.net/sr_19930829/article/details/21476287
string函数可以看
http://blog.csdn.net/qiulanzhu/article/details/50450424
接下来是有趣的东西
image.png
网友评论