string的用法

点击查看代码
#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;
}
posted @ 2022-09-30 23:01  zhaoo_o  阅读(16)  评论(0编辑  收藏  举报