#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的换行尤其得慢
*/
}
运行结果如下