一、String的基本概念
本质:string是C++风格的字符串,而string本质上是一个类
string与char*的区别:
1、cahr*是一个指针
2、string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器
特点:
1、string内部封装了很多的方法。例如查找find、拷贝copy、删除delete、替换replace、插入insert等等
2、string管理char*所分配的内存,不用担心复制越界或取值越界等,有类内部自行负责。
二、string的构造函数
学习目标:灵活使用string的几种构造函数
构造函数的原型:
string(); //创建一个空的字符串。例如string str;
string(const char* s); //使用字符串s初始化
string(const string& str); //使用一个string对象初始化另一个string对象
string(int n, char c); //使用n个字符c初始化
示例:
#include "iostream"
#include <string>
using namespace std;
void test11()
{
string s1; //默认函数 属于一个空的字符串
const char * str = "Hello world!";
string s2(str); //使用str字符串初始化s2
cout << "s2=" << s2 << endl;
//拷贝构造
string s3(s2);
cout << "s3=" << s3 << endl;
//用n个字符串c初始化
string s4(10, 'a');
cout << "s4=" << s4 << endl;
}
int main()
{
test11();
system("pause");
return 0;
}
三、string的赋值操作
学习目标:能灵活的对string字符串进行赋值操作
赋值操作的函数原型:
string& operator+(const char* s); //char*类型的字符串赋值给当前的字符串
string& operator=(const string &s); //把字符串s赋值给当前的字符串
string& operator=(char *s); //把字符赋值给当前的字符串
string& assign(const char *s); //把字符串s赋值给当前的字符串
string& assign(const cahr *s,int n) //把字符串s的前n个字符赋值给当前的字符串
string& assign(const string &s); //把字符串s赋值给当前的字符串
string& assign(int n,char c); //把n个字符串c赋值给当前字符串
示例:
#include "iostream"
#include <string>
using namespace std;
void test12()
{
string str1;
//1、string& operator+(const char* s);char*类型的字符串赋值给当前的字符串
str1 = "Hello World"; //"Hello World" 是char* s
cout << "str1=" << str1 << endl;
//2、string& operator=(const string &s); 把字符串s赋值给当前的字符串
string str2;
str2 = str1;
cout << "str2=" << str2 << endl;
//3、string& operator=(char *s);把字符赋值给当前的字符串
string str3;
str3 = 'a';
cout << "str3=" << str3 << endl;
//4、string& assign(const char *s);把字符串s赋值给当前的字符串
string str4;
str4.assign("Hello C++");
cout << "str4=" << str4 << endl;
//5、string& assign(const cahr *s,int n)把字符串s的前n个字符赋值给当前的字符串
string str5;
str5.assign("Hello C++", 5);
cout << "str5=" << str5 << endl;
//6、string& assign(const string &s);把字符串s赋值给当前的字符串
string str6;
str6.assign(str5);
cout << "str6=" << str6 << endl;
//7、string& assign(int n,char c);把n个字符串c赋值给当前字符串
string str7;
str7.assign(14, 'a');
cout << "str7=" << str7 << endl;
}
int main()
{
test12();
system("pause");
return 0;
}
四、string字符串拼接
学习目标:学会在一个字符串的末尾拼接另一个字符串
函数原型:
string& operator+=(const char* str); //重载+=操作符
string& operator+=(const char c);
string& operator+=(const string &s); //
string& append(const char *s); //把字符串s连接到当前字符串的结尾
string& append(const char *s,int n); //把字符串s的前n个连接到当前字符串的结尾
string& append(const string &s); //同 string& operator+=(const string &s);
string& append(const string &s,int pos,int n) //把字符串s从pos开始的n个字符串连接到当前字符串的结尾
示例:
#include "iostream"
#include <string>
using namespace std;
void test13()
{
//1、string& operator+=(const char* str)
string str1 = "我";
str1 += "爱玩游戏";
cout << "str1=" << str1 << endl;
//2、 string& operator+=(const char c); 追加一个字符
str1 += '!';
cout << "str1=" << str1 << endl;
//3、string& operator+=(const string &s); 追加一个字符串
string str2 = "喜欢天天玩游戏";
str1 += str2;
cout << "str1=" << str1 << endl;
//4、string& append(const char *s)
string str3 = "我";
str3.append("爱 ni");
cout << "str3=" << str3 << endl;
//5、string& append(const char *s,int n);
str3.append(",游戏! 哈哈哈", 5);
cout << "str3=" << str3 << endl;
//6、string& append(const string &s);
string str4 = "天天 玩不腻";
str3.append(str4);
cout << "str3=" << str3 << endl;
//7、string& append(const string &s,int pos,int n)
str3.append(str4,2,3);
cout << "str3=" << str3 << endl;
}
int main()
{
test13();
system("pause");
return 0;
}
五、string字符串的查找与替换
学习目标:学会string字符串的查找与替换
函数原型:
int find(const string& str,int pos=0) const; //查找str第一次出现的位置,从pos开始查找
int find(const char* s,int pos=0) const; //查找s第一次出现的位置,从pos开始查找
int find(const char *s,int pos,int n);const; //从pos位置查找s的前n个字符第一次出现的位置
int find(const char c,int pos=0); //查找c第一次出现的位置
int rfind(const string &str,int pos=nPos) const; //查找str最后一次出现的位置,从pos开始查找
int rfind(const char* s,int pos=nPos) const; //查找s最后一次出现的位置,从pos开始查找
int rfind(const char* s,int pos,int n) const; //查找s的前n个字符最后一次出现的位置
int rfind(const char c,int pos=0) const; //查找c最后一次出现的位置,从pos开始查找
string& replace(int pos,int n,const string& str); //替换从pos开始n个字符替换为字符串str;
string& replace(int pos,int n,const char *s); //替换从pos开始n个字符替换为字符串s;
示例:
#include "iostream"
#include <string>
using namespace std;
void test14()
{
string str1 = "asadasdasdasdas";
string str2 = "da";
//1、int find(const string& str,int pos=0) const; //查找str第一次出现的位置,从pos开始查找
int pos=str1.find(str2,0);
cout << "pos=" << pos << endl; //有,返回pos。没有,则返回-1
//2、int find(const char* s,int pos=0) const; //查找s第一次出现的位置,从pos开始查找
int pos1 = str1.find("da",0);
cout << "pos1=" << pos1 << endl;
//3、int find(const char *s,int pos,int n);const; 从pos位置查找s的前n个字符第一次出现的位置
int pos2 = str1.find("asda",1,2);
cout << "pos2=" << pos2 << endl;
//int rfind(const string &str,int pos=nPos) const;查找str最后一次出现的位置,从pos开始查找
int pos4 = str1.rfind("da", 13);
cout << "pos4=" << pos4 << endl;
//替换
//1、string& replace(int pos, int n, const string& str);替换从pos开始n个字符为字符串str;
str1.replace(0, 10, "th");
cout << "str1=" << str1 << endl;
//2、string& replace(int pos,int n,const char *s);替换从pos开始n个字符为字符串s;
str1.replace(2,1, "ss3");
cout << "str1=" << str1 << endl;
}
int main()
{
test14();
system("pause");
return 0;
}
总结:1、find与rfind的区别:find从左往右找,rfind从右往左找
2、find找到字符串后返回查找的第一个字符位置,找不到返回-1
3、replace在替换时,必须指定从哪一个位置开始,多少个字节替换成什么样的字符串
六、string字符串比较
学习目标:学会字符串的比较
比较方式:字符串比较是按照字符的ASCLL码进行对比。=返回0,>返回1,<返回-1
函数原型:
int compare(const string &s) const; //与字符串s比较
int compare(const char* s) const; //与字符串s比较
示例:
#include "iostream"
#include <string>
using namespace std;
void test15()
{
string str1 = "Lan";
string str2 = "Lan";
if (str1.compare(str2) == 0)
{
cout << "str1=str2" << endl;
}
else if (str1.compare(str2)>0)
{
cout << "str1>str2" << endl;
}
else if (str1.compare(str2) < 0)
{
cout << "str1<str2" << endl;
}
}
int main()
{
test15();
system("pause");
return 0;
}
七、string字符串的存取
学习目标:灵活掌握字符串的存取
string中单个字符串的存取两种方式:
char* operator[](int n); //通过[]来取字符
char & at(int n); //通过at方式取字符
示例:
#include "iostream"
#include <string>
using namespace std;
void test16()
{
string str = "21323213";
//1\通过[]方式访问字符串中的数据
for (int i = 0; i < str.size(); i++)
{
cout << str[i] << endl;
}
//2、通过at方式访问
cout << "通过at方式访问" << endl;
for (int i = 0; i < str.size(); i++)
{
cout << str.at(i) << endl;
}
//3、改
str[0] = 'w';
str.at(2) = 'e';
for (int i = 0; i < str.size(); i++)
{
cout << str[i] << endl;
}
}
int main()
{
test16();
system("pause");
return 0;
}
八、string的插入与删除
学习目标:能够灵活对string字符串进行插入与删除操作
函数原型:
string& insert(int pos,const char* s);
string& insert(int pos,const string& str); //插入字符串
string& insert(int pos,int n,char c); //在指定的位置插入n个字符c
string& erase(int pos,int n=npos); //从pos开始删除n个字符
九、string子串
学习目标:能够从字符串中提取想要的子串
函数原型:
string& substr(int pos,int n=npos) const; //返回从pos开始的n个字符组成的字符串
示例:
#include "iostream"
#include <string>
using namespace std;
void test18()
{
string str = "Hello world";
string substr=str.substr(0, 5);
cout << "str=" << str << endl;
cout << "substr=" << substr << endl;
str.erase(0, 5);
cout << "str=" << str << endl;
}
int main()
{
test18();
system("pause");
return 0;
}