山西太原制作网站人有吗,html5 网站 适配手机,特效网站模板,wordpress固定链接403STL常用容器—string容器 string基本概念string初始化及赋值1. 构造函数原型2. 字符串赋值3. 字符串拼接 string字符存取#xff08;遍历#xff09;字符串的查找和替换字符串比较string取子串字符串删除和插入string与char *类型的转化 string基本概念
本质#xff1a;
s… STL常用容器—string容器 string基本概念string初始化及赋值1. 构造函数原型2. 字符串赋值3. 字符串拼接 string字符存取遍历字符串的查找和替换字符串比较string取子串字符串删除和插入string与char *类型的转化 string基本概念
本质
string是C风格的字符串而string本质上是一个类
string和char * 区别
char * 是一个指针string是一个类类内部封装了char *管理这个字符串是一个char *型的容器。
特点
string 类内部封装了很多成员属性和方法string管理char*所分配的内存不用担心复制越界和取值越界等由类内部进行负责
string初始化及赋值
1. 构造函数原型
string(); // 创建一个空的字符串 例如: string str;string(const char* s); // 使用字符串s初始化string(const string str); // 使用一个string对象初始化另一个string对象
示例
string str hello world;
const char *str0 hello;
string str1; // 创建空字符串调用无参构造函数
string str2(str); // 调用拷贝构造函数cout str2 endl;2. 字符串赋值
C内部已对operator(const string s)等一系列的进行运算符重载并且通过函数重载的方式实现支持将string类型、char *类型以及char 字符类型赋值给string字符串变量可直接赋值简洁明了。 示例
string str hello world;
const char *str0 hello;
string str1; // 创建空字符串调用无参构造函数
str1 str0;
cout str1 endl;
str1 s;
cout str1 endl;assign方法赋值 同时string类型有赋值的方法assign可以指定赋值前n个字符给目标字符默认全部赋值其中函数第一个参数为源字符串。 示例
string str hello world;
string str1; // 创建空字符串调用无参构造函数
str1.assign(hello world,7);
cout str1 endl;3. 字符串拼接
C内部已对operator(const string s)等一系列的进行运算符重载并且通过函数重载的方式实现支持将string类型、char *类型以及char 字符类型字符串相加可直接赋值简洁明了。
string str1 hello;
string str2 world;
string str3;
str3 str1 str2;
cout str3 endl;append方法拼接 同时string类型有拼接的方法append函数原型如下
// 把字符串s连接到当前字符串结尾
string append(const char *s);
//字符串s中从pos开始的n个字符连接到字符串结尾
string append(string s, int pos, int n);示例
string str1 hello;
string str2 world;
string str3;
str3 str1 str2;
cout str3 endl;
str3.append(str2,0,3);
cout str3 endl;string字符存取遍历
string中单个字符存取有两种方式
通过 [ ] 方式获取字符通过 at 方法获取字符
获取字符串长度利用字符串 size( ) 方法 示例
void test()
{string str hello world!;int i 0;//通过[]遍历字符串 for(i 0; i str.size(); i)cout str[i];cout endl;//通过at()方法遍历字符串 for(i 0; i str.size(); i)cout str.at(i);cout endl;//对字符串特定字符赋值 str[0] x;str.at(1) x;cout str endl;
}字符串的查找和替换
查找函数原型
//查找str第一次出现位置, 从pos开始查默认为0
int find(const string str, int pos 0)
//查找字符c第一次出现位置
int find(const char c, int pos 0); 成功返回找到的下标错误返回-1 示例
//查找
string str1 abcdefgde;
int pos str1.find(de);
if (pos -1)cout 未找到 endl;
elsecout pos pos endl;替换函数原型
//从pos开始n个字符为字符串str
string replace(int pos, int n, const string str); 示例
//替换
string str1 abcdefgde;
str1.replace(1, 3, 1111);cout str1 str1 endl;总结
find查找是从左往后rfind从右往左find找到字符串后返回查找的第一个字符位置找不到返回 -1replace在替换时要指定从哪个位置起多少个字符替换成什么样的字符串
字符串比较
字符串比较是按字符的ASCII码进行对比比较机制与返回值与C语言一样。
函数原型
//与字符串s比较
int compare(const string s) const; 示例
//字符串比较
void test()
{string str1 hello;string str2 aello;int ret str1.compare(str2);if(ret 0)cout s1 s2 endl;else if(ret 0)cout s1 s2 endl;elsecout s1 s2 endl;
}string取子串
从字符串中获取想要的子串
函数原型
//返回由pos开始的n个字符组成的字符串
string substr(int pos 0, int n npos); 示例
string str abcdefg;
string subStr str.substr(1, 3);
cout subStr subStr endl;string email hellosina.com;
int pos email.find();
string username email.substr(0,pos);
cout username username endl;
string web email.substr(pos1, email.size()-pos);
cout web web endl;案例利用以上字符串操作自定义实现strtok函数的功能
补充strtok函数具体功能及参数与返回值
char *strtok(char *str, const char *delim);功能: 字符串切割参数 str: 当前要切割的字符串 delim: 根据指定的字符串进行切割返回值: 成功: 切割出来的字符 失败: NULL 切割完毕也返回NULL
vectorstring my_strtok(string str)
{vectorstring v;int pos 0;int begin 0;string subStr; //cout src str str endl;while(1){pos str.find(:,begin);if(pos -1)break;subStr str.substr(begin, pos-begin);v.push_back(subStr);//cout sub str subStr endl;begin pos 1;}subStr str.substr(begin, str.size()-begin);//cout sub str subStr endl;v.push_back(subStr);return v;
}通过find方法寻找需要分割的字符并通过substr函数分割子串最后将各个子串存入容器。
字符串删除和插入
对string字符串进行插入和删除字符操作 函数原型
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 str hello;str.insert(1, 111);cout str endl;str.erase(1, 3); //从1号位置开始删除3个字符cout str endl;string与char *类型的转化
char * 转 string构造函数
char *c_str hello world;
string str(c_str );string 转 char * c_str
string str(hello world);
char *c_str str.c_str();