欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-02 12:34:19
...
#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的换行尤其得慢 
	*/
}

运行结果如下
#2020寒假集训#C++STL-string代码笔记

相关标签: 2020寒假集训