string中比较常用的是operator[],+=,遍历和迭代器
push_back和append
push_back:尾插一个字符
append:尾插一个string对象或者是常量字符串
int main()
{
string s("hello world");
s.push_back('x); // hello worldx
s.append("yyy");// hello worldyyy
return 0;
}
insert
insert(0,“hello world”):第一个参数表示0位置,第二个参数表示插入的字符串
insert(0,1,ch):参数一:下标,参数二:插入字符的个数,参数三:要插入的字符
insert(s.begin(),ch):迭代器区间的头插
int main()
{
string s("hello world");
s.insert(0,"hello r");// hello rhello world
s.insert(10,"zzz");// hello worlzzzd
// 插入单个字符
char ch = 'a';
s.insert(0, 1,ch);// ahello world
s.insert(s.begin(), ch);// aahello world
// 在10下标位置插入p
s.insert(0, "p");
s.insert(s.begin(), ch);
cout << s << endl;
return 0;
}
erase
erase:删除字符
int main()
{
string s("hello world");
s.erase(0,1);
// 0下标位置,删除字符的个数
s.erase(s.begin());
// 迭代器的头删
s.erase(6,1);
// 在6下标位置删除一个字符
s.erase(6);
// 不给要删除的长度,后面全删除
s.erase(--s.end());
// 尾删
s.erase(s.size()-1,1);
// 尾删
s.erase(0,4);
// 0下标位置删除4个字符
return 0;
}
replace
replace:替换
int main()
{
string s("hello world");
s.replace(5,1,"%%");
// 第5个下标位置,一个字符,替换的字符
// 将一个空格替换位%%
return 0;
}
substr
substr:取字符串的子串
int main()
{
string s("hello world");
s.substr(0,5);// hello
// 取下标位0到4的字符
s.substr(0);
// 从下标位0开始取到字符串结束
return 0;
}
find
find:正着找查找string/字符串/字符返回其开始的下标(并且是第一次找到的位置)
int main()
{
string s("test.cpp");
size_t pos = s.find('.');
string suffix = s.substr(pos);// .cpp
// 如果不给长度的话,从pos位置开始取字符知道字符串结束
return 0;
}
rfind
rfind:倒着找查找string/字符串/字符返回其开始的下标(并且是第一次找到的位置)
rfind('.');// 倒着找第一个返回
find('.');// 正着找第一个返回
windows:
Linux:/
\:对 \ 转义为 \
<< 和 >>
<< 和 >> 重载之后才能使用string中重载过了
operator+
为什么要重载成全局的呢?为什么不重载为成员函数?
因为成员函数中第一个参数的位置被this指针占据,是类类的指针*const
运算符重载的成员函数要求第一个参数是类类型的参数
- string + string
- string + const char*
- const char* + string
- string + char
- char + string
operator +=
operator += :相当于push_back,在字符串的末尾插入一个字符或者是一个字符串或常量字符串
geline
getline:默认遇到 \n 就结束,遇到空格不会结束,但是也可以自己设置结束的标识符比如是 *
cin 和scanf:只能提取一个字符串,遇到 \n 或空格就结束
string str;
getline(cin,str);
getline(cin,str,终止符);// 终止符比如可以是:'*'
// str是你输入的字符串
输入是hello world
输出也是hello world