string
头文件: # include < cstring >
string str;//定义空 string 容器
string str = "abcde";
string str{ "abcde" };
小括号是复制的作用, 是将"abcde"复制给 str
大括号是赋值的作用, 是给 str 赋值 “abc”
string str1 = str; //定义新容器 str1, 拷贝 str 所有的元素
string str12(str.begin(), str.end());
//定义新容器 str12, 拷贝区间内元素
迭代器
包括:begin、end、rbegin、rend、cbegin、cend、crbegin、crend
使用方法
str.begin(); 返回迭代器, 指向第一元素
str.end(); 返回迭代器, 指向最末元素的下一个位置
str.rbegin(); 返回反向迭代器, 指向反向迭代的第一元素
str.rend(); 返回反向迭代器, 指向反向迭代的最末元素的下一个位置
string str="abcdefghijklmn";
for(auto it=str.begin();it!=str.end();it++){
//注意这里是不等于end, 而不是小于end
cout<<*it<<endl;
}
输出结果为:
abcdefghijklmn
str[id]; 返回下标为 id 的字符, 不检查是否越界
str.assign(str1.begin()+1, str1.end()-1);
//将区间内的元素赋值给 str
1. =:字符串赋值
例: s1为空, 则: s1=“abc"之后, s1变为"abc”
2. +和 +=:连接字符串
用的较多的是 +=
例: s1=“abc”, s2=“123”, 则: s1+=s2之后, s1 变为 “abc123”, s2不变
3.<、>=、< 和 <=:字符串比较 (例如a < b)
按字典序判断字符串的大小, 并返回判断结果.
例: s1=“abc”, s2=“abb”, 则 s1<s2 返回 false
例: s1=“abc”, s2=“abb”, 则 s1>s2 返回 true
4.==、!=:比较字符串
判断字符串是否相同
例: s1=“abc”, s2=“abb”, 则 s1 ==s2 返回 false
5.<<、>>:输出、输入字符串
直接使用cin和cout输出
cin>>str;
cout<<str;
str.swap(str1);
// 交换两个容器的内容
//例:str="abc", str1="123"
//运行之后, str="123", str1="abc"
str.push_back('s');
//在 str 末尾添加字符 's'
//例:str="abc"
//运行之后, str="abcs"
str.pop_back();
//删除最后一个字符
//例:str="abc"
//运行之后, str="ab"
str.front();
//返回第一元素
//例:str="abc"
//str.front()就等于 'a'
str.back();
//返回最末元素
//例:str="abc"
//str.back()就等于 'c'
str.clear();
//清空容器
str.empty();
//容器为空返回 true, 否则返回 false
str.erase(3);
//删除 str[3]~str[n-1] , 返回 str
//例: str="abcabcabc"
//运行之后, str="abc"
str.erase(2, 3);
//删除 str[2]~str[2+3-1] , 返回 str
//删除 str[2] 开始的 3 个字符
//例: str="abcqw123"
//运行之后, str="ab123"
str.erase(str.begin());
//删除指向的元素, 返回迭代器, 指向下一元素
//例: str="abc"
//运行之后, str="bc", 返回指向字符 'b' 的迭代器
str.erase(str.begin(), str.end());
//删除区间内的元素, 返回迭代器, 指向下一元素
//例: str="abc"
//运行之后, str="c", 返回指向字符 'c' 的迭代器
//因为删除的字符是 "ab" 下一个字符是 'c'
//所以返回指向字符 'c' 的迭代器
str.find(ch, 2);
//返回 ch 在 str[2]~str[n-1] 中首次出现的位置
//例: str="abcabc", ch="bc"
//返回 4
eg:
ios::sync_with_stdio(false);
cin.tie(0);
string p, s;
int n, m;
cin >> n >> p >> m >> s;
int i = 0;
while ((i = s.find(p, i)) != s.npos) {
printf("%d ", i);
i++;
}
拷贝相关:
str2=str1.substr(2); //提取子串,提取出str1的下标为2到末尾,给str2
str2=str1.substr(2,3); //提取子串,从 str1的下标为2开始,提取3个字节给str2
1、to_string
包含在# include<string>。作用是把数值类型如int、double、long等转化为string,详细可参考博客:https://blog.csdn.net/lzuacm/article/details/52704931
int a = 4;
double b = 3.14;
string str1, str2;
str1 = to_string(a);
str2 = to_string(b);
cout << str1 << endl;
cout << str2 << endl;
2、stoi和atoi
包含在
#include<string>
,不是c++11的可以在#include<cstring>
。作用是将字符串转化为int型。区别是stoi的形参是const string,而atoi的形参是const char。c_str()的作用是将const string转化为const char。
string s1("1234567");
char* s2 = "1234567";
int a = stoi(s1);
int b = atoi(s2);
int c = atoi(s1.c_str());
cout << a << endl;
cout << b << endl;
cout << c << endl;