string
头文件
include<string>
string类型的赋值和连接操作列表
- 格式:string s(字符串);
定义string类型变量s,并初始化,例如:
string s("abc 123");
- 格式:string s(个数,字符);
定义并初始化为若干相同字母,例如:
string s(10,'a');
- 格式:string s=字符串;
定义并初始化赋值,例如:
string s="abc 123";
- 运算符‘=’,s=字符串;
赋值语句,与成员函数assign相似,例如:
string str1,str2,str3;
str1="abc";
str2='x';
str3=str1+str2;
- 运算符 :+ ,字符串变量+字符串变量,字符串变量+字符串常量,字符串常量+字符串变量
连接两个字符串
string s="Hello";
s=s+" world";
cout<<s;
注意: 字符串常量+字符串常量 这是错误的,想想为什么?
- 运算符+=: s+=字符/字符串
string s="Test: ";
for(char i='a';i<='z';i++)
s+=i;
cout<<s;
string 类型的主要函数与运算
- s.size(); 求字符串长度,等同于length()函数,时间复杂度
O(1) ,例如:string s="abcd"; cout<<s.size();注意:字符数组函数strlen()时间复杂度是
O(n) .
2.s[下标i] ;取字符串的某个字符,等同于at(下标i)函数,例如:
string s="abcd";
cout<<s[0]<<s.at(2); //输出 ac
3.getline(cin,s); 读入一整行(直到换行),包括读入空格
4.s.substr(开始位置i,子串长度len); 取字符串的子串,当i+len超过原字符串长度时,只取剩下的。 提醒:i要在字符串长度内。例如:
string s="abcdef";
cout<<s.substr(3,2)<<s.substr(3,20)<<endl; //输出dedef
5.s.insert(插入位置i,插入字符串s); 在字符串的第i个位置插入s,例如:
string s="abcdef";
s.insert(2,"+"); //输出ab+cdef
cout<<s;
6.s.erase(开始位置i,删除长度len); 删除字符串的第i个位置后len个字符;
string s="abcdef";
s.erase(2,3);
cout<<s; //输出abf
7.s.replace(开始位置i,长度len,要换上的字符串ss); 用字符串ss替换字符串中i开始长度是len的一段,例如:
string s="abcdef";
s.replace(2,1,"123");
cout<<s; //输出ab123def
8.s.find(子串,位置);
string的find()函数用于找出字母在字符串中的位置。
s.find(str,position)
find()的两个参数:
str:是要找的元素
position:字符串中的某个位置,表示从从这个位置开始的字符串中找指定元素。
可以不填第二个参数,默认从字符串的开头进行查找。
返回值为目标字符的位置,当没有找到目标字符时返回npos。
例1:找到目标字符的位置
string s = "hello world!";
cout << s.find("e") << endl;
结果:1
例2:未找到目标字符
string s = "hello world!";
if (s.find("a") == s.npos) {
cout << "404 not found" << endl;
}
结果:404 not found
例3:指定查找位置
string s = "hello world!";
cout << s.find("l",5) << endl;
结果为:9
从空格开始(包含空格)的后半部分字符串中寻找字符"l",结果找到了world中的"l"在整个字符串中的位置