#2020寒假集训#C++STL-string代码笔记

#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>//万能头文件 
#include<string>//string头文件
using namespace std;
int main()
{
	//尽量不要cin/cout/scanf/printf混用,此篇仅为做笔记 
	cout<<endl;
	string s="zxl";//string是字符串 
	string s1="I",s2="Love";
	s=s1+" "+s2+" "+s+"!";
	cout<<"用加号可将string直接拼接:"<<s<<endl<<endl;
	/*
		string一般只能用cin/cout读入输出
		非要用printf的时候可以用
		printf("用加号可将string直接拼接:%s\n\n",s.c_str());
		注意函数 c_str()
	*/
	//现在s字符串是I Love zxl!
	int len1,len2;
	len1=s.length();
	len2=s.size();
	printf("s.length();返回字符串长度:%d\n\n",len1);
	printf("s.size();返回字符串长度:%d\n\n",len2);
	/*
		s.length();和s.size()效果差不多 
		长度即明面上有几个字符,包括空格,不考虑\0
		\0因编译器不同,可加可不加,在此不深究
	*/
	string charu;
	charu="And You ";
	s.insert(2,charu);//s.insert(2,"And You ");的效果一样 
	cout<<"s.insert(pos,str);在pos号位置插入字符串str:"<<s<<endl<<endl;
	s.insert(s.begin()+2,charu.begin(),charu.begin()+4);
	cout<<"s.insert(it,it1,it2);在it迭代器对应位置插入其他串的[it1,it2)区间:"<<s<<endl<<endl;
	cout<<"s.find(x);返回字符串x在s中第一次出现的位置:"<<s.find("And")<<endl<<endl; 
	/*
		查找返回的第一个位置,是pos号,不是迭代器 
		如果找不到,会返回string::npos常用如下示例 
	*/
	if(s.find("ABC")==string::npos) cout<<"用string::npos的find失配写if,现满足==找不到"<<endl<<endl;
	s.erase(s.begin()+5);
	cout<<"s.insert(it);删除it迭代器对应位置的字符:"<<s<<endl<<endl;
	s.erase(s.begin()+2,s.begin()+9);
	cout<<"s.insert(it1,it2);删除[it1,it2)迭代器对应位置的字符:"<<s<<endl<<endl;
	s.erase(2,4);
	cout<<"s.insert(pos,len);删除从pos号位置开始长度为len的字符:"<<s<<endl<<endl;
	/*
		pos是几号位置,即s[]中[]内的数字 
		it,it1,it2是迭代器,类似于只指针的作用
		插入到哪儿,最后那个串的首字符就出现在哪 
		注意区间左闭右开 
	*/
	string part=s.substr(2,4);
	cout<<"part=s.substr(pos,len);返回s中从pos号位置开始长度为len的子串:"<<part<<endl<<endl;
	s.replace(2,4,"ai");
	cout<<"s.replace(pos,len,str);把s中pos号起长度为len的字符串替换为str:"<<s<<endl<<endl;
	//替换的时候str的长度不一定要等于len,即删掉的和添进的长度不一定一样
	string tihuan="love";
	s.replace(s.begin()+2,s.begin()+4,tihuan);
	cout<<"s.replace(it1,it2,str);把s中[it1,it2)迭代器对应区间内的字符串替换为str:"<<s<<endl<<endl;
	s.clear();
	printf("s.clear();清空并输出清空后的length长度:%d\n\n",s.length());
	printf("s.empty();判断string是否非空,按int输出:%d\n\n",s.empty());
	//对C++的读入方式做个小试验 
	string put;
	cout<<"接下来输入无空格的一句"<<endl<<endl<<"请输入:"; 
	cin>>put;
	cout<<"查看输出结果:"<<put<<endl<<endl;
	cout<<"接下来输入有空格的一行"<<endl<<endl<<"请输入:";
	fflush(stdin);//或者getchar();接收遗留的换行符 
	getline(cin,put);
	cout<<"用getline(cin,put);读入的结果:"<<put<<endl<<endl<<"请输入:";
	cin>>put;
	cout<<"用cin>>put;读入的结果:"<<put<<endl<<endl<<"请输入:";
	fflush(stdin);//或者getline(cin,put);接收多余的一行字符 
	put=cin.get();
	cout<<"用put=cin.get();读入的结果:"<<put<<endl<<endl;
	return 0;
	/*
		#注意#
		cin>>put;读入到空格之前
		put=cin.get();读入一个字符
		getline(cin,put);读入一行字符 
		
		同时,只有cin是真的待输入
		其他俩如果前面有没被吸收完的字符(包括遗留的换行符 )
		会直接恰前面的字符,不用再输入
		fflush(stdin)可释放缓存,把没被接收完的字符清空
		
		但这些cin/cout很慢,所以用string也会导致时间复杂度上升 
		其中<<endl的换行尤其得慢 
	*/
}

运行结果如下
在这里插入图片描述

发布了22 篇原创文章 · 获赞 0 · 访问量 420

猜你喜欢

转载自blog.csdn.net/qq_46184427/article/details/103966941
今日推荐