.
前言
与C语言不同,string是C++经过封装处理的数据类型,并且是一个C++内部提前被创建的类,使得string具有一般数据类型没有的功能和属性,比如我们可以调用string类里已经定义好的函数,提高写代码的效率。
对string的理解
string本质就是类(可参考上篇博客有对类的详细讲解),用类声明(也可称为创建,实例化)的变量一般被称为对象
string str;
这段代码就是创建了一个string类的对象str,因为类也是一种数据结构,所以也可以说是声明了string类型的变量。
https://blog.csdn.net/phantomthief1412/article/details/122174025
string与基本数据类型的区别
1.创建对象时是否初始化:string是经过封装处理的数据类型,它内部的代码已经写好了,若创建对象的时候没有进行初始化,对象就已经被初始化为空字符了(原因可参考上篇博客对类的讲解),当然,也可以用赋值操作符将一个有字符的字符串作为初始值。
2.作用:基本类型只能用来保存值,而类除此之外还有属于自己的功能和属性。
对string的创建并初始化
string str;
//初始化为空字符串
string str=字符串;
//初始化为指定字符串
string str(字符串);
//同上
string str(字符串s,位置p,数量n);
//字符串s中从p开始的n个字符组成的新字符串作为str的值
string str(数量n,字符c);
//初始化为n个字符c
string内部常用的成员函数
获得对象信息
size()
//获取字符串的字符数(string是字节数),返回类型是size_t
length()
// 同上
max_size()
//获取std.:string可以处理的最大字符数(std:string是字节数),返回类型是size_t
capacity()
/获取字符串对象目前的容量,单位是字符,返回类型是size_t
empty()
//判断字符串是不是空,返回值类型是bool。
clear()
//清空字符串对象(也可以直接赋值空字符串如string=""😉
resize(大小)
// 调整字符串对象的大小,多出来的数组空间默认用空字符填充
resize(大小,字符)
//调整字符串对象的大小
at()
与中括号[]功能一样,但at()在越界访问时抛出异常警报,让程序直接崩溃
对对象赋值
push_back(字符)
//在末尾添加一个字符,也可以用"+="
append(字符串)
//在末尾添加字符串,也可以用"+="
append(字符串s,开始位置p,数量n)
//将字符串s中从p开始的n个字符添加到未尾
append(数量n,字符c)
//在末尾添加n个字符c
assign(字符串)//
重新赋值
assign(字符串s,开始位置p,数量n)
//将字符串s中从p开始的n个字符赋值给字符串对象
assign(数量n,字符c)
// 赋值为n个字符c
改变字符串对象的内容
insert(位置p,字符串s)
//在位置p插入字符串s
insert(位置p,字符串s,开始位置sp,数量n)
//将字符串s中从sp开始的n个字符插入到位置p
insert(位置p,数量n,字符c)
//在位置p插入n个字符c
replace(位置p,数量n,字符串s)
//字符串中从p开始的n个字符替换为字符串s
replace(位置p,数量n,字符串s,开始位置sp,数量sn)
//将字符串s中从p开始的n个字符替换字符串从p开始的n个字符• replace(位置p,数量n,数量sn,字符c)//字符串中从p开始的n个字符替换为sn个字符c
erase(位置p,数量n)
//删除字符串中从位置p开始的n个字符
erase(位置p)
//删除字符串中从位置p开始的所有字符
erase()
// 清空字符串,与clear一样
对对象查找
以下返回类型都是size_t,如果找不到则返回std:string:npos
find(字符C,位置p)
//在字符串中从位置p开始向后查找第一次出现字符c的位置
find(字符串s,位置p)
//在字符串中从位置p开始向后查找查找第一次出现字符串s的位置
rfind(字符c,位置p)
//在字符串中从位置p开始向前查找第一次出现字符c的位置
rfind(字符串s,位置p)
//在字符串中从位置p开始向前查找查找第一次出现字符串s的位置
find_first_of(字符c,位置p)
//在字符串中从位置p开始向后查找第一次出现字符c的位置
find_first_of(字符串s,位置p)
//在字符串中从位置p开始向后查找字符串s中任意一个字符,返回第一次出现的位置
find_last_of(字符C,位置p)
//在字符串中从位置p开始向前查找第一次出现字符c的位置
find_last_of(字符串s,位置p)
//在字符串中从位置p开始向前查找字符串s中任意一个字符,返回第一次出现的位置
find_first_ not_of(字符C,位置p)
//在字符串中从位置p开始向后查找第一个不是字符c的字符的位置
find_first_not_of(字符串s,位置p)
//在字符串中从位置p开始向后查找第一个不是字符串s中任意一个字符,返回第一次出现的位置
find_last_not_of(字符c,位置p)
//在字符串中从位置p开始向前查找第一个不是字符c的字符的位置
find_last_not_of(字符串s,位置p)
//在字符串中从位置p开始向前查找第一个不是字符串s中任意一个字符,返回第一次出现的位置
子字符串
substr(位置p,数量n)
// 获取子字符串,即字符串中从位置p开始的n个字符作为新的字符串•substr(位置p) // 获取子字符串,即字符串中从位置p开始到结尾作为新的字符串
substr()
// 字符串中从位置开始到结尾作为新的字符串,即复制出一个新的字符串
附加其他头文件对string常用的函数
所需头文件#include<ccpyte.>
isdigit()
//判断字符是否为阿拉伯数字
isalpha()
//判断是否为字母
islower()
//判断是否为小写字母
isupper()
//判断是否为大写字母
函数说明:检查参数是否为阿拉伯数字0 到9。 返回值:若参数为阿拉伯数字,则返回true,否则返回null(0)。 附加说明:此为宏定义,非真正函数
所需头文件#include<algorithm.>
count(ivec.begin(), ivec.end(), searchValue)
//其功能类似于find
,这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果。
string在解题中的应用样例展示
题目来源:南方科技大学第四届新生赛题C
附上译文:
Cknight得到长度N(1<=N<= 500000)的字符串s(1≤N≤500000)。字符串s只能由字符“a”和字符“b”组成。
骑士想把弦弄得一团糟。也就是说,字符串ss不包含字符串“ab”作为它的子字符串。 骑士可以使用几个操作来实现这一点。
在每一个操作中,他可以选择一个位置,并用字符“a”或字符“b”替换对应的字母。 他想知道所需的最小手术数。 输入描述: 一行包含字符串s。
输出描述: 输出答案。 示例 输入:bbbaababa 输出:2 说明
在示例1中,修改位置6和8的字母是一个最优解决方案(假设字符串的索引是1)
用string的解题(这道题其实用string不是最优解)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
string s;
int main()
{
cin >> s;
int sum = 0;
int min = count(s.begin(), s.end(), 'b');
for (size_t i = 0; i <= s.size(); i++)
{
int a;
int b;
if (i == 0)
{
a = 0;
b = count(s.begin(), s.end(), 'b');
}
else if (i == s.size())
{
a = count(s.begin(), s.end(), 'a');
b = 0;
}
else
{
a = count(s.begin(), s.begin() + i - 1, 'a');
b = count(s.begin() + i, s.end(), 'b');
}
min = a + b < min ? a + b : min;
}
cout << min;
return 0;
}
◆◆◆◆◆◆◆◆◆◆◆◆◆◆感谢您对这篇文章的阅读,感恩一见三连哦~♡◆◆◆◆◆◆◆◆◆◆◆◆◆◆