CSP2019考前字符串基础知识整理

一.string类

1.string的初始化

将string str 赋值为空:

string str="";
string str;
str.clear();

或赋值为其他字符串:

string str1="absba";
string str2("lqyz");
string s(num,"c");//生成一个字符串,包含num个"c"字符

 

2.string的遍历

获取第j位置的字符:char ch=str.at(j) 或者是:char ch=str[j]

for(int i=0;i<(int)str.length();i++)
  cout<<str[i]<<"\n";

for(int i=0;i<(int)str.length();i++)
  cout<<str.at(i)<<"\n";

 

3.string的连接

1.string内部已经重载好了"="运算符(没有"-"/"*"等运算),即我们可以直接对两个字符串进行相加:

string s1="lqyz",s2="csprp++";
string s3=s1+s2;
cout<<s3;//输出结果:lqyzcsprp++
string s1="lqyz";
s1+="csprp++";
cout<<s1;//输出结果:lqyzcsprp++

2.我们还可以使用string内部的append函数来进行连接:

将s2连接至s1尾部:s1.append(s2)   此时s2没有变化,s1变为了原来的s1与s2相连成字符串:

string s1="lqyz",s2="csprp++";
s1.append(s2);
cout<<s1<<" "<<s2;//输出结果:lqyzcsprp++ csprp++

 

4.string的查找

1.find()函数

find()函数可以直接查询一个或一段字符首字符出现的第一个位置的下标,如果没有询问到,函数会返回-1:

string str="abskuaebsk";
int a=str.find("bsk");
int b=str.find("ak");
cout<<a<<" "<<b;//输出结果:1 -1

find()函数还可以查询一个指定位置之后的一个或一段字符首字符出现的第一个位置的下标:find("abc",5):在下标5(包括5)之后查询abc首字符a首次出现的位置的下标

string str="abskuabebsk";
int a=str.find("a",5);
int b=str.find("a",6);
cout<<a<<" "<<b;//输出结果:5 -1

 2.rfind()函数

使用方法与find()函数类似,只是rfind()函数从后往前进行查询,返回值为这一段字符的首字符的下标

常用它们两个来判断该子串是否唯一:如果返回值相同则说明唯一,否则子串不唯一

string str="abskuabebsk";
int a=str.find("ab");
int b=str.rfind("ab");
cout<<a<<" "<<b;//输出结果:0 5

 

5.string的删除(erase()函数)

1.erase(i,n); 删除从i开始的n个字符(i为int类型的数字)

str="abskuabebsk";
str.erase(0,2);//删除从下标0开始(包括0)的两个字符
str.erase(3,2);//删除新串的从下标3开始(包括3)的两个字符
cout<<str;//输出结果:skuebsk

2.erase(i);删除下标i之后的所有字符(此处i为int类型的数字)

str="absfuabebak";
str.erase(6);//删除下标为6(包括6)之后的所有字符 
cout<<str;//输出结果:absfua

3.erase(i);删除i位置的字符(注意此处i为string类型的迭代器,而不是int类型的数字,要与2区分)

str="abskuabebsk";
str.erase(str.begin());//删除str[0](首字符)
str.erase(str.begin()+7);//删除新串中的str[7],即原串中的str[8]
str.erase(str.end()-1);//删除新串中的倒数第一个字符
cout<<str;//输出结果:bskuabes 

切记一定不要写成以下形式:

str="abskuabebsk";
str.erase(1);//因为括号中应是个string类型的迭代器,这样写是错误的 
str.erase(7);
cout<<str;

 4.erase(first,last);删除从first到last之间的字符(first和last都是迭代器)

注意此处删除的为[first,last)区间的元素,不包括first,不包括last

str="absfuabebak";
str.erase(str.begin()+3,str.end()-1);//删除区间:[3,10)的元素
//此语句相当于str.erase(str.begin()+3,str.begin()+10);
//即删除区间包括左而不包括右
//注意str.end()-1指的是最后一个元素
cout<<str;//输出结果:absk

 

6.插入字符

1.在尾部增加字符,函数有 +=、append()、push_back()(只能加入单一字符)

str+="abs";
str.append("abs");
str.push_back('a'),str.push_back('b'),str.push_back('s');
//三种表达形式效果相同

2.insert()函数

str.insert(1,"hello");//在下标为1的位置加入字符串,其余的相对后移
cout<<str;//输出结果:ahellobsgddjk

 

7.输入输出

1.cin和cout

注意cin读入string字符串时无法读入空格,即遇到空格便停止读入

2.getline()读入一行(可以读入空格)

且getline以读入回车为结束,但它可以单独的读入一行回车

while(getline(cin,str)){
    cout<<str<<"\n";
}

比如上述代码如果一直输入回车,程序不会停止(可以输入Ctrl+Z进行停止循环)

所以应注意:

scanf("%d\n",&n);//此处%d后面必须加一个\n,消除第一行的回车的影响
for(int i=1;i<=n;i++){
    getline(cin,str);
    cout<<str<<"\n";
}
posted @ 2019-10-12 10:26  KGW_源  阅读(424)  评论(0编辑  收藏  举报
- Hide code