点击查看代码
#include<iostream>
#include<string>
#include<cstdio>
#pragma warning(disable:4996)
using namespace std;
int main() {
//1、定义string型变量并初始化
string str = "abcd"; //直接初始化
str = "abc"; //赋值
cin >> str;
//2、输出:直接输出,使用下标访问,使用迭代器访问
cout << str; //只能使用cout直接输出string型变量整个字符串
int len = str.size(); //获取str长度(不含末尾空字符)
for (int i = 0; i < len; i++) { //str[i]是字符型,可以使用下标访问
printf("%c", str[i]);
}
string::iterator it; //创建指向string型变量的迭代器it
for (it = str.begin(); it != str.end(); it++) {
printf("%c", *it);
}
//3、printf()只能输出char型,可以使用c_str()将string型转换为char型
printf("%s\n", str.c_str());
string str1 = "abc", str2 = "xyz", str3;
//operator +=操作
str3 = str1 + str2; //将str1和str2拼接后赋值给str3
cout << str3 << endl;
str1 += str2; //将str2拼接在str1后面
cout << str1 << endl;
//compare operator操作:==、!=、<、<=、>、>=,比较规则从左到右逐个比较字典序
str1 = "aa", str2 = "aaa", str3 = "abc";
if (str1 < str2) printf("str1字典序小于str2\n");
if (str1 != str3) printf("str1不等于str3\n");
if (str3 > str2) printf("str3字典序大于str2\n");
//length()和size()返回str的字符个数(不含末尾空字符)
str1 = "abcd";
printf("%d\n", str1.length());
printf("%d\n", str1.size());
//insert(pos, str):在pos号位置插入string型变量或const型常量字符串
str1 = "123"; str2 = "456";
str1.insert(1, str2); //在str[1]处插入str2
str1.insert(1, "456"); //等价于在str[1]处插入字符串"456"
cout << str1 << endl; //str1=145623
//insert(it1, it2, it3):it是迭代器,it1是被插入字符串位置,it2是插入字符串首元素迭代器,it3是尾元素的下一个地址的迭代器
str1 = "123"; str2 = "4657890";
//str1[1]、str2[2]、str2[4],将str2的"57"插到str1的"1"后面
str1.insert(str1.begin() + 1, str2.begin() + 2, str2.end() - 3);
cout << str1 << endl; //str1=15723
//erase(it):删除迭代器it指向的元素
str1 = "abcdefg";
str1.erase(str1.begin() + 2); //删除str1[2]这个元素
cout << str1 << endl;
//erase(first,last)删除迭代器指向的[first,last)区间内的所有元素
str1 = "abcdefg";
str1.erase(str1.begin() + 2, str1.end() - 1); //删除str1[2,6)区间内的元素
cout << str1 << endl;
//erase(pos, length):从pos位置开始删除length个字符
str1 = "abcdefg";
str1.erase(3, 2); //从str1[3]开始删除2个元素
cout << str1 << endl;
//clear()清空string变量所有元素
str1.clear(); //清空str1所有元素
//substr(pos, length):返回从pos号位置开始,长度为len的子串
string str1 = "0123456789";
string str2 = str1.substr(2, 3); //返回从str1[2]开始的3个字符长度的子串
cout << str2 << endl; //str2=234
string str1 = "0123456789", str2 = "456";
//str1.find(str2):如果str2是str1的子串,则返回它在str1中第一次出现的位置,如果不是则返回string::npos
if (str1.find(str2) != string::npos) { //在str1中查找str2子串
cout << str1.find(str2) << endl; //str2在str1中第一次出现的位置str1[4]
}
//str1.find(str2, pos):从str1[pos]位置开始向后查找str2,返回它在str1中第一次出现的位置,如果没有则返回string::npos
if (str1.find(str2, 6) != string::npos) { //从str1[6]开始向后查找str2子串
cout << str1.find(str2) << endl;
}
else {
cout << "从str1[6]开始搜索str2,没有找到" << endl;
}
string str1 = "0123456789", str2 = "abcd";
//str1.replace(pos, length, str2):从str1[pos]开始,将长度为length的子串替换为str2
cout << str1.replace(0, 3, str2) << endl; //将str1[0]开始的3个字符替换为str2,str1=abcd3456789
//str1.replace(it1,it2,str2):把迭代器指向的str1[it1,it2)区间内的子串替换为str2
str1 = "0123456789", str2 = "abcd";
//将str1[0,3)区间内的子串替换为str2,str1=abcd3456789
cout << str1.replace(str1.begin(), str1.begin() + 3, str2) << endl;
return 0;
}