栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ string容器详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ string容器详解

string容器
  • 1.string的基本概念
  • 2.string的构造函数
  • 3.string的赋值操作
  • 3.string字符串的拼接
  • 4.string查找与替换
  • 5.string的比较
  • 6.string的存取
  • 7.string的插入和删除
  • 8.string的子串

1.string的基本概念
本质:string是c++类型的字符串,其本质是一个封装好的类
string和char*的区别:
1.char* 是一个指针
2.string是一个内部封装了char* 的类,管理这个字符串,是一个char*型容器
特点:
string类内部封装了很多成员函数
例如:查找find,拷贝copy,删除delete,替换replace,插入insert
string管理char*所分配的内存,不用担心赋值越界和取值越界等问题,由类内部负责
2.string的构造函数
函数原型:
 1.string();                      //创建一个空字符串
 2.string(const char* s);        //使用字符串初始化
 3.string(const string& str);    //拷贝,使用一个string对象初始化另一个string对象
 4.string(int n,char c);         //使用n个字符c初始化

测试案例

void text01()
{
	string str1;             //1
	string str21("aaaaa");   //2
	string str22="bbbbb";
	string str3(str21);      //3
	string str4(5, 'c');     //4
	cout << "str21=" << str21 <<"nstr22=" << str22 
		 << "nstr3=" << str3 << "nstr4=" << str4 << endl;
}

测试结果

3.string的赋值操作
函数原型:
 1.string& operator=(const char* s);          //char*类型字符串赋给当前字符串(string类对象)
 2.string& operator=(const string& str);      //string类型字符串str赋给当前字符串
 3.string& operator=(char c);                 //单个字符赋给当前字符串
 4.string& assign(const char* s);             //char*类型字符串赋给当前字符串
 5.string& assign(const char* s,int n);       //把字符串s前n个字符赋给当前字符串
 6.string& assign(const string& str);         //string类型字符串str赋给当前字符串
 7.string& assign(int n,char c);              //把n个字符c赋给当前字符串

测试案例

void text02()
{
	string str[7];
	str[0] = "aaaaa";              //1
	str[1] = str[0];               //2
	str[2] = 'a';                  //3
	str[3].assign("bbbbb");        //4
	str[4].assign("ccccc", 3);     //5
	str[5].assign(str[4]);         //6
	str[6].assign(5, 'd');         //7
	cout << "nstr[0]=" << str[0] << "nstr[1]=" << str[1] << "nstr[2]=" << str[2] << "nstr[3]=" << str[3]
		 << "nstr[4]=" << str[4] << "nstr[5]=" << str[5] << "nstr[6]=" << str[6] << endl;
	cout << "str[0][0]=" << str[0][0] << endl;
}

测试结果

3.string字符串的拼接
 函数原型:
 1.string& operator+=(const char* s);                //重载+=
 2.string& operator+=(const char c); 
 3.string& operator+=(const string& str);
 4.string& append(const char* s);                    //把字符串s连接到当前字符串尾
 5.string& append(const char* s,int n);              //把字符串s前n个字符连接到当前字符串尾
 6.string& append(const string& str);
 7.string& append(const string& str,int pos,int n);  //把字符串str从pos开始的n个字符连接到当前字符串尾

测试案例

void text03()
{
	string str1;
	string str2 = " C++";
	string str3 = " ,yesssssss";
	str1 += 'I';                               //2,等价于str1=str1+"I";
	str1 += " love";                           //1,等价于str1=str1+" love";
	str1 += str2;                              //3,等价于str1=str1+str2;
	str1.append(" and");                       //4
	str1.append(" algorithm aaa",10);          //5
	str1.append(str3);                         //6
	str1.append(str3, 0, 5);                   //7
	cout << str1;
}

测试结果

4.string查找与替换
 查找:查找指定字符串是否存在,若存在返回出现的下标位置,若不存在返回-1
 替换:在指定位置替换字符串
 函数原型:
 1.int find(const string& str,int pos = 0);//从pos开始查找字符串str第一次出现的位置
 2.int find(const char* s,int pos=0);    //从pos开始查找字符串s第一次出现的位置
 3.int find(const string& str,int pos = 0,int n);//从pos开始查找字符串str的前n个字符第一次出现的位置
 4.int find(const char c,int pos=0);    //从pos开始查找字符c第一次出现的位置
 5.int rfind(const string& str,int pos = npos);//从pos开始查找字符串str最后一次出现的位置
 6.int rfind(const char* s, int pos = npos);    //从pos开始查找字符串s最后一次出现的位置
 7.int rfind(const string& str,int pos,int n);//从pos开始查找字符串str的前n个字符最后一次出现的位置
 8.int rfind(const char c,int pos=0);    //从pos开始查找字符c最后一次出现的位置
 9.string& replace(int pos,int n,const string& str);//用字符串str替换从pos开始的n个字符
 10.string& replace(int pos,int n,const char* s);//用字符串s替换从pos开始的n个字符

测试案例

void text04()
{
	string str1 = "abcdEabcdef";
	int pos = str1.find("cd");
	if (pos != -1)
	{
		cout << "pos=" << pos << endl;
	}
	else cout << "未找到" << endl;

	pos = str1.rfind("cd");
	if (pos != -1)
	{
		cout << "pos=" << pos << endl;
	}
	else cout << "未找到" << endl;

	str1.replace(2, 3, "1234");//用"1234"替换从第二个位置开始的3个字符
	cout << str1 << endl;
}

测试结果

5.string的比较
 比较方式:
 字符串之间的比较是按照逐个字符的ASCII码大小进行比较的
 = 返回 0 ;> 返回 1;< 返回 -1
 函数原型:
 int compare(const string& str);//与字符串str比较
 int compare(const char* s);//与字符串s比较

测试案例

void text05()
{
	string str1 = "abcdefg";
	string str2 = "bcdef";
	if (str1.compare(str2) == 0)
		cout << "字符串相等n";
	else if (str1.compare(str2) > 0)
		cout << "str1较大n";
	else
		cout << "str1较小n";

	if (str1.compare("abcdefg") == 0)
		cout << "字符串相等n";
	else if (str1.compare("abcdefg") > 0)
		cout << "str1较大n";
	else
		cout << "str1较小n";
}

测试结果

6.string的存取
 字符串的存取即 string中单个字符的访问与修改
 函数原型:
 1.char& operator[](int n)    //通过[]方式访问与修改字符
 2.char& at(int n)            //通过at方式获取字符

测试案例

void text06()
{
	string str = "abcde";
	
	for (int i = 0; i < str.size(); ++i) //size() 是获取字符串大小的函数
	{
		str[i] = 'A'+i;           //通过[]方式修改
		cout << str[i] << " ";    //通过[]方式访问
	}
	cout << endl;
	for (int i = 0; i < str.size(); ++i) 
	{
		str.at(i) = 'a' + i;          //通过at方式修改
		cout << str.at(i) << " ";     //通过at方式访问
	}
}

测试结果

7.string的插入和删除
 函数原型:
 1.string& insert(int pos,const char* s);      //从pos位置开始插入字符串s,pos均从0开始计数
 2.string& insert(int pos,const string& str);  //从pos位置开始插入字符串str
 3.string& insert(int pos,int n,char c);       //从pos位置开始插入n个字符c
 4.string& erase(int pos,int n=npos);          //从pos位置开始删除n个字符

测试案例

void text07()
{
	string str = "hello";
	str.insert(2, "123");
	cout << "插入后:" << str << endl;

	str.erase(2,3);
	cout << "删除后:" << str << endl;
}

测试结果

8.string的子串
 从字符串中获取想要的子串
 函数原型:
 string substr(int pos,int n=npos);        //返回由pos开始的n个字符组成的子串
 默认的npos是从pos到字符串结尾的所有字符的个数

测试案例

void text08()
{
	//获取QQ邮箱前面的QQ号
	string str = "123456789@qq.com";
	int pos = str.find("@");
	string QQnumb = str.substr(0, pos);
	cout << "邮箱为:" << str << endl;
	cout << "QQ号为:" << QQnumb << endl;
}

测试结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352421.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号