本质:
string是C++风格的字符串,而string本质上是一个类
string和char * 区别:
char * 是一个指针
string是一个类,类内部封装了char*,管理这个字符串,是一个char型的容器。
特点:
string 类内部封装了很多成员方法
例如:查找find,拷贝copy,删除delete 替换replace,插入insert
string管理char所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责
string构造函数
#include <iostream>
#include <string>
using namespace std;
void test01()
{
string s1; //创建空字符串,调用无参构造函数
cout << "str1 = " << s1 << endl;
const char* str = "hello world";
string s2(str); //把c_string转换成了string
cout << "str2 = " << s2 << endl;
string s3(s2); //调用拷贝构造函数
cout << "str3 = " << s3 << endl;
string s4(10, 'a'); //使用10个a初始化
cout << "str4 = " << s4 << endl;
}
int main()
{
test01();
return 0;
}
string赋值操作
#include <iostream>
#include <string>
using namespace std;
void test01()
{
string str1;
str1 = "hello world"; //直接赋值
cout << "str1 = " << str1 << endl;
string str2;
str2 = str1; //字符串之间赋值
cout << "str2 = " << str2 << endl;
string str3;
str3 = 'a'; //单个字符赋值
cout << "str3 = " << str3 << endl;
string str4;
str4.assign("hello world"); //assign方法直接赋值字符串
cout << "str4 = " << str4 << endl;
string str5;
str5.assign("hello c++", 5); //把字符串前5个字符赋值
cout << "str5 = " << str5 << endl;
string str6;
str6.assign(str5); //assign方法拷贝字符串
cout << "str6 = " << str6 << endl;
string str7;
str7.assign(5,'x'); //assign方法赋值5个x
cout << "str7 = " << str7 << endl;
}
int main()
{
test01();
return 0;
}
string字符串拼接
#include <iostream>
#include <string>
using namespace std;
void test01()
{
//直接+=方法
string str1 = "我";
str1 += "爱玩游戏";
cout << "str1 = " << str1 << endl;
str1 += ':';
cout << "str1 = " << str1 << endl;
string str2 = "原神";
str1 += str2;
cout << "str1 = " << str1 << endl;
//append方法
string str3 = "I";
str3.append(" love ");
str3.append("game abcde", 5); //前5个字符
//str3.append(str2);
str3.append(str2,0,4); //从下标0开始,截取4个字符,拼接到字符串末尾
//1个中文算作2个字符
cout << "str3 = " << str3 << endl;
}
int main()
{
test01();
return 0;
}
string查找和替换
#include <iostream>
#include <string>
using namespace std;
void test01()
{
//查找
string str1 = "abcdefgde";
int pos = str1.find("de"); //查找第一次出现的位置,可以控制从哪个位置开始查找,这里默认是0
if(pos == -1)
{
cout << "未找到" << endl;
}
else
{
cout << "pos = " << pos << endl;
}
pos = str1.rfind("de"); //查找最后一次出现的位置
cout << "pos = " << pos << endl;
}
void test02()
{
//替换
string str1 = "abcdefgde";
str1.replace(1,3,"1111"); //从1开始替换掉3个字符
cout << "str1 = " << str1 << endl;
}
int main()
{
//test01();
test02();
return 0;
}
//find()是从左往右找,rfind()是从右往左找
//find()找到字符串后返回第一个字符的位置,找不到返回-1
//replace在替换时,要制定从哪一个位置起,多少个字符,替换成什么样子的字符串
string字符串比较
#include <iostream>
#include <string>
using namespace std;
void test01()
{
string s1 = "hello";
string s2 = "aello";
int ret = s1.compare(s2);
if(ret == 0){
cout << "s1等于s2";
}
else if(ret > 0){
cout << "s1 大于 s2";
}
else{
cout << "s1 小于 s2";
}
}
int main()
{
test01();
return 0;
}
string字符存取
#include <iostream>
#include <string>
using namespace std;
void test01()
{
//两种方法
string str = "hello world";
for(unsigned int i = 0 ;i < str.size() ; i++)
{
cout << str[i] << " ";
}
cout << endl;
for(unsigned int i = 0 ;i < str.size(); i++)
{
cout << str.at(i) << " ";
}
cout << endl;
//字符修改
str[0] = 'x';
str.at(1) = 'x';
cout << str << endl;
}
int main()
{
test01();
return 0;
}
string插入和删除
#include <iostream>
#include <string>
using namespace std;
void test01()
{
string str = "hello";
str.insert(1,"111"); //从1号位置开始插入
cout << str << endl;
str.erase(1,3); //从1号位置开始3个字符
cout << str << endl;
}
int main()
{
test01();
return 0;
}
string子串
#include <iostream>
#include <string>
using namespace std;
void test01()
{
string str = "abcdefg";
string subStr = str.substr(1,3); //从1号位置开始获取3个字符串
cout << "subStr = " <<subStr << endl;
string email = "hello@sina.com" ;
int pos = email.find('@');
string username = email.substr(0,pos); //后面的pos实际上还是指的是获取的字符个数,只不过从0号位开始获取,就恰好是pos位置前面的部分
cout << "username = " << username << endl;
}
int main()
{
test01();
return 0;
}