String类和STL

String 类

  • 头文件string.h和cstring支持对C风格字符串进行操纵的C库字符串函数,但不支持string类

string类构造

  • string类通常把string::npos定义为字符串的最大长度,通常为unsigned int的最大值
	string one("Hello"); //构造one字符串
	one+="oooops!";//重载+=
	//同时可以重载= + [] <<
	char alls[] = "you and me run to a different beat";
	string three(alls+6,alls+10);
	//数组名alls相当于指针,alls+6是char* 类型
	string four(alls,10);
	cout<<four<<endl;
	string five(&four[6],&four[10]);//6到10字节
	//不能使用four+6,four+10,因为对象名four不是数组名,不会被看做是对象的地址,four不是指针,所以不行
	//只能用&four[6]
	cout<<five<<endl;
	string six(five,0,3);//0到3字节
	cout<<six<<endl;**

C++11新增的构造函数

	string oneone = {'k','j'};
	cout<<oneone<<endl;

string类输入

对于C风格字符串有以下输入风格

char info[100];
cin>>info;
cin.getline(intfo,100);
cin.get(info,100);

对于string类有两种方式

string stuff;
cin>>stuff;
getline(cin,stuff);

两个版本的getline都有一可选参数,用来指定输入的边界

cin.getline(info,100,":");
getline(stuff,":");

功能上,string类的getline能自动调节目标string对象的大小,使之刚好能够存储输入的字符。
所以string类的getline()不需要指定读取多少个数值参数。

将文件读到整个string时有两个边界,一个是string::npos,一个是程序的内存量。
getline从输入中读取字符,直到发生三种情况

  • 1 到达文件尾部,输入流的eofbit被设置,fail()和eof()都被设置为true;
  • 2 遇到分界字符,此时删除分界字符并不存储;
  • 3 读取字符到达最大边界值,将设置输入流的failbit,意味着fail()设置为true

输入流统计系统

  • eofbit 寄存器:检测到文件尾部
  • badbit 寄存器:硬件故障
  • goodbi t寄存器:一切顺利
  • failbit 寄存器:输入错误

文件读到string类

ifstream fin;
	fin.open("holly.txt");
	if(fin.is_open()==false){//是否成功打开
		cout<<"wrong"<<endl;
		exit(EXIT_FAILURE);
	}
	string item;
	int cnt = 0;
	getline(fin,item,':');
	while(fin){
		++cnt;
		cout<<cnt<<":"<<item<<endl;
		getline(fin,item,':');
	}
	cout<<"Done"<<endl;
	fin.close();
	return 0;

string类使用

string str1 = "cobra";
length()//
size()//
find()//从pos位置开始查找str或者s,返回首次出现的位置
rfind()//查找str或s最后一次出现的位置
find_first_of()//从本身查找str中任意一个字符首次出现的位置
int pos1 = str1.find_first_of("hark");//返回r的位置 c o b r
find_last_of()//从本身查找str中任意一个字符最后出现的位置
int pos2 = str1.find_last_of("hark");//返回a的位置 a 
find_first_not_of()//从本身查找第一个不包含在str中的字符
int pos3 = str1.find_first_not_of("hark");//返回c的位置 c
find_last_not_of()//
int pos4 = str1.find_last_not_of("hark");//返回b的位置 a r b

string其他功能

capacity()
reserve()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值