string基本字符序列容器

C语言每天提供专门的字符串类型,需要通过字符数组才能对字符串进行存储和处理。在标准C++中,字符串类由C++ STL实现。string是一个基于字符的序列容器,具有vector向量一样的内部线性结构,字符逐一写入容器,最后以null字符结尾。跟传统的char*字符数组相比,string提供了丰富的函数用于字符的添加、删除、替换、查找和比较等。

创建string对象

主要有以下几种方式。

(1)    string()

string s;

(2)    string(conststring&s,size_type pos=0,size_type n=npos)

string s1;

string s2(s1);

(3)    string(const char*)

char* cArray=”abc”;

string s(cArray);

字符的添加

字符的添加主要有push_back、append、insert等函数。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s1;
	s1.push_back('a');
	s1.push_back('b');
	s1.push_back('c');
	cout<<s1<<endl;

	char* cArray="efgh";
	string s2(cArray);
	cout<<s2<<endl;
	cout<<s1+s2<<endl;

	cout<<s1.append(s2)<<endl; 

	string::iterator i;
	i=s1.begin();
	i++;
	s1.insert(i,'8');
	cout<<s1<<endl;

	s1+=s2;
	cout<<s1<<endl;
	return 0;
}

字符的遍历

可以使用数组方式和迭代器[支持反向迭代器]两种方式访问string中的字符。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	char* cArray="hello,world";
	string s(cArray);
	//数组方式
	for(int i=0;i<s.size();i++)
	{
		cout<<s[i]<<endl;
	}
	//迭代器方式
	string::reverse_iterator rbegin,rend;
	rend=s.rend();
	for(rbegin=s.rbegin();rbegin!=rend;rbegin++)
	{
		cout<<*rbegin<<endl;
	}
	return 0;
}

字符的删除

利用erase函数和clear函数可以实现字符的删除。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	char* cArray="a1234567";
	string s(cArray);
	s.erase(s.begin());
	cout<<s<<endl;//1234567
	s.erase(s.begin()+2,s.end()-2);
	cout<<s<<endl;//1267
	s.erase(0,2);
	cout<<s<<endl;//67
	s.clear();
	cout<<s<<endl;//
	return 0;
}

字符的替换

利用replace函数可以实现字符的替换。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	char* cArray="hello,boy!";
	string s(cArray);
	s.replace(6,3,"girl");
	cout<<s<<endl;//hello,girl!
	s.replace(10,1,1,'.');
	cout<<s<<endl;//hello,girl.
	s.replace(s.begin(),s.begin()+5,"good morning");
	cout<<s<<endl;//good morning,girl.
	return 0;
}

字符的搜索

利用find、rfind、find_first_of、find_first_not_of、find_last_of、find_last_not_of等函数可以实现字符的搜索,返回字符串的位置,找不到,返回-1.

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s("dog bird chicken bird cat");
	//字符串查找
	cout<<s.find("bird")<<endl;//打印4
	cout<<(int)s.find("fish")<<endl;//-1
	//字符查找
	cout<<s.find('i',0)<<endl;//5
	//从字符串的末尾开始查找字符串
	cout<<s.rfind("bird")<<endl;//17
	//从字符串的末尾开始查找字符
	cout<<s.rfind('i')<<endl;//18
	//查找第一个属于某子串的字符
	cout<<s.find_first_of("33r97")<<endl;//6
	//查找第一个不属于某字符串的字符
	cout<<s.find_first_not_of("dog bird")<<endl;//9
	//查找最后一个属于某子串的字符
	cout<<s.find_last_of("r")<<endl;//19
	//查找最后一个不属于某字符串的字符
	cout<<s.find_last_not_of("tea")<<endl;//22

	return 0;
}

字符串的比较

利用compare函数实现比较。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s1("abcdef");
	string s2("abc");
	cout<<s1.compare("abcdef")<<endl;//相等,返回0
	cout<<s1.compare(s2)<<endl;//s1>s2,返回正值
	cout<<s1.compare("aby")<<endl;//s1<"aby" ,返回-1
	cout<<s1.compare(0,3,s2)<<endl;//s1的前3个字符等于s2,返回0
	return 0;
}

其他常用函数

还有其他函数用以给出string容器的统计信息,如length、size、empty、c_str等。

这里只是给出了部分函数,还有相当多的函数没有列出,具体可以参考C++ Reference这个网站,http://www.cplusplus.com/reference/string/string/,该网站很详细地列出了各种用法。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s;
	cout<<s.empty()<<endl;//空串,返回1
	s+="1234567";
	cout<<s.empty()<<endl;//0
	cout<<s.length()<<endl;//7
	cout<<s.size()<<endl;//7
	const char* cArray=s.c_str();//将string对象转换为字符数组
	cout<<cArray[2]<<endl;//3
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 17:19:44

string基本字符序列容器的相关文章

第17章 string基本字符序列容器

/* 第17章 string基本字符序列容器 17.1 string技术原理 17.2 string应用基础 17.3 本章小结 */ // 第17章 string基本字符序列容器 // 17.1 string技术原理 -------------------------------------------------------------------------------------- // 17.2 string应用基础 ----------------------------------

string基本字符序列容器(竞赛时常用的使用方法总结)

C语言只提供了一个char类型用来处理字符,而对于字符串,只能通过字符串数组来处理,而C++STL提供了string基本字符序列容器来处理字符串,可以将其理解为字符串类,它提供了添加,删除,替换.查找和比较等丰富.简洁的方法. 下面是在编写代码是的具体应用. 1 //关于C++ STL string基本字符系列容器的学习,看别人的代码一百遍,不如自己动手写一遍. 2 #include <string> 3 #include <vector> 4 #include <iostr

C++之string基本字符系列容器

string基本字符系列容器 C语言只提供了一个插入类型用来处理字符, 而对于字符串, 只能通过字符串数组来处理, 显得十分不便. C++STL提供了string基本字符系列容器来处理字符串, 可以把string理解为字符串类, 它提供了添加, 删除, 替换, 查找和比较等丰富的方法. 虽然使用vector<char>这样的向量也可以处理字符串, 但功能比不上string. 向量的元素类型可以是string, 如vector<string>这样的向量, 实际上就类似于C语言中的字符

string基本字符系列容器(一)

由于C语言中只提供了一个char类型用来处理字符,对于字符串的处理,我们往往都是通过字符数组来处理的,这有些时候还是很不方便的. 其实vector<char>就和char类型的数组很像,vector<string>就是字符串类型的数组了. 1.1 创建一个string类型的对象 下面的代码创建了一个字符串对象s,且s是一个空串,他的长度是0, 对于string来说,可以同时用s.length()和s.size()来求长度 # include<iostream> # in

string基本字符系列容器

今天学了关于string的一些基本字符容器,下面我就摘要几种. 一.用reverse反向排序string对象(要用#include<algorithm>头文件) 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 using namespace std; 5 int main() 6 { 7 string s; 8 cin>>s; 9 reverse(s.begin(),

JAVA基础 String包装类下 .replace方法的使用以及char和字符序列的使用场景

ptLink0.setText(arbu.getPtLink().replace("&","&")); // 如果像 '&','&' 这样替换是不行的,因为 '' 是给char用的,要替换字符序列的话,需要用 "" .replace连用用来替换多个char字符或者字符序列(String): // 在读取的时候,解析器会自动将其转换回"&","<","&

Java的——String类、StringBuffer和StringBuilder、不可变和可变字符序列使用陷阱

Java的知识点21--String类.StringBuffer和StringBuilder.不可变和可变字符序列使用陷阱 原文链接 https://blog.csdn.net/qq_39368007/article/details/84033272 String类 String 类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为"不可变对象" substring()是对字符串的截取操作,但本质是读取原字符串内容生成了新的字符串. String测试代码 pac

C/C++中字符串String及字符操作方法

本文总结C/C++中字符串操作方法,还在学习中,不定期更新... 字符串的输入方法 1.单个单词可以直接用std::cin,因为:std::cin读取并忽略开头所有的空白字符(如空格,换行符,制表符),读取字符直至再次遇到空白字符,读取终止.所以cin只能读取单个单词.显然可以多次使用cin来获取多个单词: 2.多个单词使用函数std::getline(std::cin, s)请看下面代码: #include <iostream> #include <string> int mai

特定字符序列的判断(1028)

p { margin-bottom: 0.25cm; line-height: 120% } 描述 编写一程序,识别依次读入的一个以"#"为结束符的字符序列是否为形如"序列[email protected]序列2"模式的字符序列.期中序列1和序列2中都不含字符"@",且序列2是序列1的逆序列.例如"[email protected]+a"是满足条件的序列字符,而"[email protected]"则不是.