string
对字符串常用的需求功能进行了封装,使得操作起来更方便且不易出错,在使用时需加上 string 头文件,即 #include <string>
,并在头文件下加上 “using namespace std;
”。
1. string 的定义
string str;
如果要初始化可以直接给 string 类型的变量进行赋值:
string str = "abcd"
2. string 中内容的访问
(1) 通过下标访问
//类似字符串数组访问字符串
#include <cstdio>
#include <string>
using namespace std;
int main () {
string str = "abcd" ;
for (int i = 0; i<str.length(); i++) {
printf ("%c", str[i]) ;
}
return 0 ;
}
如果要读入和输出整个字符串,只能使用 cin 和 cout:
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "abcd" ;
cout<<str ;
return 0 ;
}
(2) 通过迭代器访问
迭代器的定义:
string::iterator it;
通过 *it 访问 string 里的每一位
#include <cstdio>
#include <string>
using namespace std;
int main () {
string str = "abcd" ;
for (string::iterator it = str.begin(); it != str.end(); it++) {
printf ("%c", *it) ;
}
return 0 ;
}
3. string 常用函数实例解析
(1) operator+=
//operator+=:实现将两个 string 直接拼接起来
#include <iostream>
#include <string>
using namespace std;
int main () {
string str1 = "abc" ;
string str2 = "def" ;
cout<<str1+str2<<endl ;
return 0 ;
}
(2) compare operator
//按字典序比较两个 string
#include <cstdio>
#include <string>
using namespace std;
int main () {
string str1 = "aa", str2 = "aaa", str3 = "aaa" ;
if (str1 < str2) printf ("YES\n") ;
if (str2 == str3) printf ("YES\n") ;
return 0 ;
}
(3) length()/size()
//length()返回 string 的长度
#include <cstdio>
#include <string>
using namespace std;
int main () {
string str = "abcd" ;
printf ("%d", str.length()) ;
return 0 ;
}
(4) insert()
i) insert(pos, string)
//在 pos 下标处插入 string
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "abc", str1 = "111" ;
str.insert(0, str1) ,
cout<<str<<endl ;
return 0 ;
}
ii) insert(it, it1, it2)
//it 为被插入字符串要插入的位置下标,it1 和 it2 为带插入字符串的首尾迭代器,表示将串的 [it1, it2) 插入 it 的位置上
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "012345", str1 = "abcdefg" ;
str.insert(str.begin()+3, str1.begin(), str1.end()) ;
cout<<str<<endl ;
return 0 ;
}
(5) erase()
i) 删除单个元素
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "abcdefg" ;
str.erase(str.begin()) ;
cout<<str<<endl ;
return 0 ;
}
ii) 删除区间内所有元素
- 按首尾位置删除
//erase(first, last):删除 [first, last) 内的所有元素, 用迭代器表示
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "0123456" ;
str.erase(str.begin(), str.begin()+3) ;
cout<<str<<endl ;
return 0 ;
}
- 按首或尾位置加上删除字符个数
//erase(pos, length):pos 直接用下标表示
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "0123456789" ;
str.erase(2, 4) ;
cout<<str<<endl ;
return 0 ;
}
(6) clear()
//clear():用以清空 string 中所有元素
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "abcdefg" ;
str.clear() ;
cout<<str.length()<<endl ;
return 0 ;
}
(7) substr()
//substr(pos, len):返回从 pos 号下标开始长度为 len 的字串
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "0123456789" ;
cout<<str.substr(3, 3)<<endl ;
return 0 ;
}
(8) string::npos
string::npos 是一个常数,用以作为 find 函数失配时的返回值
(9) find()
str.find(str2), 当 str2 时 str 的字串时,返回其在 str 中第一次出现的位置;如果不是字串,则返回 string::npos
str.find(str2, pos),从 str 的 pos 下标开始匹配 str2,返回值与上相同
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "abcdefghi", str1 = "abc" ;
if (str.find(str1) != string::npos) {
cout<<str.find(str1)<<endl ;
}
if (str.find(str1, 1) != string::npos) {
cout<<str.find(str1, 1) ;
} else {
cout<<"False"<<endl ;
}
return 0 ;
}
(10) replace()
str.replace(pos, len, str2):把 str 从 pos 下标开始长度为 len 的字串替换为 str2
str,replace(it1, it2, str2):把 str 的迭代器 [it1, it2) 范围的字串替换为 str2
#include <iostream>
#include <string>
using namespace std;
int main () {
string str = "0123456789", str1 = "aaa" ;
cout<<str.replace(2, 1, str1)<<endl ;
//将str中的'2'换成 str1 即 01aaa3456789
cout<<str.replace(str.begin()+5, str.begin()+6, str1) ;
//将更新后的 str 中的'3'换成str1 即 01aaaaaa456789
return 0 ;
}