知识梳理:string类

string类

string类是模板类:typedef basic_string<char> string;
使用string类要包含头文件<string>
string对象的初始化:
	string s1("hello");
	string month="month";
	string s2(8,' x');

错误的初始化方法

string e1='c';//error,不能直接用字符去初始化
string e2('u');//error
string e3=22;//error,不能直接用数字去初始化
string e4(8);//error

可以将字符赋值给string对象

string s;
s='n';//ok
(1)string对象的长度用成员函数length()读取:
	string s("hello");
	cout<<s.length()<<endl;
(2)string支持流读取运算符:
	string stringObject;
	cin>>stringObject;
(3)string支持getline函数:
	string s;
	getline(cin,s);//读取一整行到s中

string的赋值和连接

(1)=赋值
	string s1("cat"),s2;
	s2=s1;
(2)用assign成员函数赋值
	string s1("cat"),s3;
	s3.assign(s1);
(3)用assign成员函数部分赋值
	string s1("catpig"),s3;
	s3.assign(s1,1,3);//从s1中下标为1的字符开始赋值3个字符
(4)单个字符复制:s2[5]=s1[3]='a';
(5)逐个访问string对象中的字符:
	string s1("hello");
	for(int i=0;i<s1.length();i++)
		cout<<s1.at(i)<<endl;
成员函数at会做范围检查,如果超出范围会抛出out_of_range异常,而下标运算符[]不会做范围检查。

(6)+运算符连接字符串
	string s1("good"),s2("morning!");
	s1+=s2;
	cout<<s1;
(7)用成员函数append连接字符串
	s1.append(s2);
	s2.append(s1,3,s1.size());//下标为3开始,s1.size()个字符,如果字符串内没有足够字符,则复制到字符串最后一个字符

比较string

(1)用关系比较符比较string的大小:==,>=,<=,!=,>,<,返回值都是bool类型
(2)用成员函数compare比较string的大小:
	string s1("hello"),s2("hello");
	int f1=s1.compare(s2);//相等返回0,s1大返回1,s1小则返回-1
	int f2=s1.compare(1,2,s3,0,3);//部分比较,将s1下标为1开始的两个字符和s3下标从0开始的三个字符比较

子串substr

string s1("hello world"),s2;
s2=s1.substr(4,5);//下标4开始的连续5个字符

交换string

s1.swap(s2);//成员函数swap,交换两个字符串内容

寻找string中的字符

成员函数find()
	s1.find("lo");
	s1.find("ll",2);//从下标2开始查找
在s1中从前向后查找,“lo”第一次出现的地方,如果找到返回"lo"开始的位置,即l所在的位置下标。如果找不到,返回string::npos(string中定义的静态常量)

成员函数rfind():刚好相反,从后往前找

成员函数find_first_of():
	s1.find_first_of("abcd");
	在s1中从前向后查找,“abcd”中任何一个字符第一次出现的地方,如果找到则返回字母的位置找不到则返回string::npos;

成员函数find_last_of()作用刚好相反

删除string中的字符

(1)成员函数erase(): 
	s1.erase(5);//删除下标5及之后的字符

替换string中的字符

成员函数replace():
	s1.replace(2,3,"haha");//将s1中下标2开始的三个字符换成"haha"

在string中插入字符

成员函数insert():
	s1.insert(5,s2);//将s2插入s1下标5的位置
	s1.insert(2,s2,5,3);//将s2中下标5开始的3个字符插入到s2中下标2的位置

*转换成C语言char 字符串

成员函数 c_str():
	s1.c_str();//返回传统的const char *类型的字符串,且该字符串以"\0"结尾

成员函数data():
	const char *p1=s1.data();//s1.data()返回一个char *类型的字符串,对s1的修改可能会使p1出错
	for(int i=0;i<s1.length();i++)
		printf("%c",*(p1+i));

字符串流处理
除了标准流和文件流输入输出外,还可以从string进行输入输出。

类似istream和ostream进行标准输入输出,我们用istringstream和ostringstream进行字符串上的输入输出,也称为内存输入输出。

#include <string>
#include <iostream>
#include <sstream>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值