一、string本质上是一个类
string和char*区别:
string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。
string类内部封装了很多成员方法
例如:查找find,拷贝copy,删除delete 替换replace,插入insert
string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责
char*是一个指针.
二、 string构造函数
构造函数原型:
string(); //创建一个空的字符串例如: string str;
string(const char* s); //使用字符串s初始化 string str("abcd")
string(const string& str); //使用一个string对象初始化另一个string对象
string(int n, char c); //使用n个字符c初始化
string str1;
string str2("abcdefg");
char* str="abcdefg"
string str2(str);
string str3(str2);
string str5(10, 'A');
cout << str1 << endl; //" "
cout << str2 << endl;//abcdefg
cout << str3 << endl;//abcdefg
cout << str4 << endl;//abcdefg
cout << str5 << endl;//AAAAAAAAAA
三、string赋值操作
1、利用赋值符“=”进行赋值
2、利用assign进行赋值
string str1 = "abcdefg";
string str2 = str1;
cout << "str2 =" << str2 << endl;//str2=abcdefg
string str3;
str3 = 'a';
cout << "str3 = " << str3 << endl;//str3=a
string str4;
str4.assign("hello C++");
cout << "str4 =" << str4 << endl; //str4=hello C++
string str5;
str5.assign("hello C++",5);
cout << "str5 =" << str5 << endl; //str5=hello
四、字符串拼接
1、用“+=”进行拼接
string str1 = "abcdefg"; str1 += "-xyz"; //可以拼接字符串 str1 += '*'; //可以拼接单个字符 string str2 = "@sohu.com"; str1 += str2; //可以拼接字符串变量的值 cout << "str1=" << str1 << endl; //str1=abcdefg-xyz*@sohu.com
2、用append方法拼接
string str1 = "abcdefg"; str1.append("-xyz"); cout << "str1= " <<str1 << endl; //str1=abcdefg-xyz str1.append("12345", 2); cout << "str1= " << str1 << endl;//str1= abcdefg-xyz12 添加前面两个字符 string str2 = "--yuiop"; str1.append(str2, 1, 3); cout << "str1= " << str1 << endl;//str1= abcdefg-xyz12-yu 添加str2中下标1开始后面3个值
五、查找和替换
1、用find和rfind查找的区别
string str = "abcdefg-de";
int ret=str.find("de");
cout << "ret=" << ret << endl; //ret=3 返回查找到的开始下标
int ret2 = str.rfind("klm");
cout << "ret2=" << ret2 << endl; //ret2=-1 没有找到返回-1
int ret1 = str.rfind("de");
cout << "ret1=" << ret1 << endl; //ret1=8 返回从后面查找到的开始下标
2、用replace替换
string str = "abcdefg-de";
str.replace(1, 3, "WXYZ");
cout << "str=" << str << endl; //str=aWXYZefg-de 把下标1开始的三个字符替换为WXYZ四个字符
六、字符存取
1、利用数组下标取值
string str = "abcdefg";
str[1]='B'; //存字符
for (size_t i = 0; i < str.length(); i++)
{
cout << str[i] << " "; //取字符
}
cout << endl;
//输出 :a B c d e f g
2、利用at访问
string str = "abcdefg";
str.at(1)='B';
for (size_t i = 0; i < str.length(); i++)
{
cout << str.at(i) << " ";
}
cout << endl;
//输出 :a B c d e f g
七、字符串比较compare
string str1 = "abcdef";
string str2 = "abcdef";
string str3 = "abcde";
string str4 = "abcDef";
string str5 = "xbcdef";
cout << "str1.compare(str2)=" << str1.compare(str2) << endl;//str1.compare(str2)=0 相等
cout << "str1.compare(str3)=" << str1.compare(str3) << endl;//str1.compare(str3)=1 f>无
cout << "str1.compare(str4)=" << str1.compare(str4) << endl;//str1.compare(str4)=1 d>D
cout << "str1.compare(str5)=" << str1.compare(str5) << endl;//str1.compare(str5)=-1 a<x
八、插入和删除
1、插入Insert和删除erase
string str1 = "abcdef";
str1.insert(3, "---");
cout << "str1= " << str1 << endl;//str1= abc---def 下标3位置插入“---”
str1.insert(3, 4, 'U');
cout << "str1= " << str1 << endl;//str1 = abcUUUU--- def 下标3位置插入4个‘U’
str1.erase(3, 4);
cout << "str1= " << str1 << endl;//str1 = abc--- def 下标3位置删除4个字符
九、截取子串
string str = "wangwu@163.com";
string substr;
substr=str.substr(0, 6); //截取从0下标开始的6个字符
cout << "substr= " << substr << endl; //wangwu
int pos=str.find('@'); //找到‘@’的位置
substr = str.substr(0, pos); //找到子串后原串是不会变化的
cout << "substr= " << substr << endl; //wangwu