天天看点

C++学习(5):字符串string函数用法详解

前言:

C++中的字符串string很有意思,兼具基础类型和类类型的特点,也兼具数组和容器的特点。接下来就string的用法以及标准库提供的函数具体说明。下面的例子从多种使用场景给出示例。

正文:

#include <iostream>
#include <string>
using namespace std;

int main()
{
	// 1、字符串的定义和赋值
	string str = "I am Jimmy";  //可以用等号,因为string类重载了“=”运算符。
	string str2("I am Jimmy");  //可以用string的构造函数定义字符串
	string str3;
	str3.assign("I am Jimmy");  //可以用string类提供的赋值函数

	// 2、访问字符串某个位置上的字符
	cout << str[0] << endl;       //数组的方式
	cout << str.at(0) << endl;    //string类提供的访问方式
	cout << str.front() << endl;  //访问第一个位置
	cout << str.back() << endl;   //访问最后一个位置

	// 3、字符串的大小(容量)
	cout << str.size() << "," << str.length() << endl; //返回源字符串的长度大小,这两个函数一样的效果。
	cout << str.max_size() << endl;                    //返回string对象中可存放的最大字符串的长度。
	cout << str.capacity() << endl;                    //返回string分配的存储容量
	cout << (str.empty() ? "Y" : "N") << endl;         //判空函数

	// 4、增
	str = "I am Jimmy";
	str.insert(0, "hello everyone, "); //指定下标,插入字符串
	cout << str << " :" << str.size() << endl;
	
	str = "I am Jimmy";
	str.push_back('!');  //固定在末尾加上一个字符
	cout << str << " :" << str.size() << endl;

	str = "I am Jimmy";
	str.append("!!");  //append函数在末尾追加字符串
	cout << str << " :" << str.size() << endl;

	str = "I am Jimmy";
	str.append(1, '!');  //如果追加字符,则需要指定个数
	cout << str << " :" << str.size() << endl;

	// 5、删
	str = "I am Jimmy";
	str.erase(1, 3);  //删除下标1开始,长度3的所有元素
	cout << str << ":" << str.size() << endl;

	str = "I am Jimmy";
	str.erase(str.begin() + 2);  //如果想删除制定位置的一个char,必须要用用迭代器,不能直接制定下标2
	cout << str << ":" << str.size() << endl;

	str = "I am Jimmy";
	str.erase(str.begin() + 1, str.end() - 1);  //用迭代器删除范围内的所有元素
	cout << str << ":" << str.size() << endl;

	// 6、改
	str = "I am Jimmy";
	str[2] = ' ';  //删除下标1开始,长度3的所有元素
	cout << str << ":" << str.size() << endl;

	// 7、查
	str = "I am Jimmy";
	int position = str.find("yI");  //字符的位置
	cout << position << endl;

	position = str.find("am");     //字符串的位置
	cout << position << endl;

	// 8、替换
	str = "I am Jimmy";
	str.replace(2, 3, "love ");    //原字符串从下标2开始,往后3个元素,替换成参数中的字符串
	cout << str << ":" << str.size() << endl;

	// 9、子串
	str = "I am Jimmy";
	str2 = str.substr(5, 5);    //2个参数,截取下标5,及之后的5个元素
	cout << str2 << ":" << str2.size() << endl;

	str = "I am Jimmy";
	str2 = str.substr(2);    //1个参数,截取下标2及之后的所有元素
	cout << str2 << ":" << str2.size() << endl;

	// 10、迭代器
	str = "I am Jimmy";
	for (string::iterator ite = str.begin(); ite != str.end(); ite++) {
		cout << *ite << endl; // string是容器,当然可以使用迭代
	}

	// 11、查++
	// find函数是匹配整个串,而find_first_of是将参数串拆开一一匹配
	str = "apple";
	position = str.find_first_of("aeiou");  //简单的一行就能判断单词里面有没有元音字母
	cout << position << endl;
}