string的使用
1. string的定义和初始化
使用string要使用<string>头文件
//1. 默认初始化为空
string str1; //str1 = "\0"
//2. 使用拷贝初始化
string str2 = str1;
//3. 使用构造函数
string str3(“values”);
//4. 连续多个相同字符,该方法与vector相似
string str4 (5, 'm'); //连续5个m, str4 = "mmmmm"
//5. 使用迭代器复制范围
string str(b, e); //b e是迭代器string::iterator,复制[b, e)的内容,是左闭右开
2. string的操作
string 输入输出
//1. 读取string
string str;
cin >> str; //将字串写入str,但中间不能出现空格。否则会分割开
//2. 读取一整行字符串,包括空格
getline(cin, str);
//3. 输出字符串
cout << str << endl;
//4. 使用push_back()往字符串后加字符,类似stack
str.push_back('a'); //在str后加字符‘a’
string 的属性
string str = "abdcdfe";
//1. str.size(), 获取str的字符个数
int len = str.size();
//2. str.empty().返回str是否为空,str为空返回true, 否则返回false
bool isEmpty = str.empty();
//3. pop_back(),删除str的最后一个字符,没有返回值
str.pop_back();
//4. str.capacity(),str的当前容量,与size()不同
int cap = str.capacity();
//5. str.resize(),用来增大或缩小容器
str.resize(15); //扩大到15个
.size()与.capacity()是不同的,.size()是当前字符串中的字符个数,而.capacity()是当前字符串的总容量,系统分给该字符串的内存,size要超过capacity时,系统会自动扩容,重新分配内存空间。
string 的运算符重载
==、 >=、>、< 、 <=、 != 都可以用来比较两个string
+ 可以连接两个字符串
如:
string str1("123");
string str2("456");
str1 = str1 + str2; //str1 = "123456";
3. string的访问方式
string的访问方式主要有两种:下标和迭代器,一般使用下标访问就可以满足大部分需求。
- 使用下标访问,类似数组:
string str = "1243455543";
for(int i = 0; i < str.size(); i++){
cout << str[i];
}
- 使用迭代器:
string str = "25sdfsfefe";
string::iterator it; //迭代器
for(it = str.begin(); i != str.end(); i++){
cout << *i; //记得要解引用
}
//也可直接使用auto
for(auto i = str.begin(); i != str.end(); i++){
cout << *i;
}
4. 处理string中的字符
判断string中字符的主要函数,在头文件中
- isalpha(ch) //当ch是字母返回truew
- isdigit(ch) //判断数字
- isspace(ch) //判断空格
- islower(ch) //判断小写字母
- isupper(ch) //判断大写
- isxdigit(ch) //判读十六进制
字符转换
- tolower(ch) //大写字母换成小写,小写不变
- toupper(ch) //小写换大写,大写不变
5. 额外的string操作
下面的操作要注意下标范围
用string来拷贝const char*类型:
const char* str = "1559666666";
string str1(str, n); //str1是str指向的数组中前n个字符的拷贝[0, n-1]
string str2(str, pos); //str2是str从下标pos开始的字符的拷贝[pos, str.size())
string str3(str, pos, len); //相对于2加了长度[pos, pos + len);
substr操作:
str.substr(pos, n); //返回一个string,截取范围[pos, pos + n);
6. 改变string的其他方法
- assign、insert和erase
assign是替换当前字符串的内容;
insert是插入字符;
erase是删除字符。
//1.assign用法: s.assign(args), args是要替换的字符,也可改为(pos, len)
string s("123");
const char *cp = "abc de";
s.assign(cp, 6); //s = "abc de";
//2.insert用法: s.insert(pos, arg), pos可以是下标或者迭代器,
//是插入当前位置的前面一个位置,arg是指定的字符,前可以加数量n。
//使用迭代器时会返回指向新添加的第一个元素的迭代器
string s;
s.insert(s.size(), 5, 'a'); //在末尾插入5个字符‘a’
//3.erase用法: s.erase(pos, len), 也可以用两个迭代器s.erase(e, d),此时
//会返回e这个迭代器,即删除[e, d)范围的值
s.erase(pos, len);//删除pos开始后面的len个字符。
- append和replace函数
//1. append函数,类似push_back(),但数量不同
string s = "123";
s.append("abc"); //s = "123abc"
//2. replace函数: s.replace(range, arg), range是范围,
//可以是下标和长度或者一对迭代器
string s = "123";
s.replace(1, 1, "56"); //s = "1563";