蓝桥杯lesson3---string的使用
🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
string的概念
string字符串是一种更加高级的封装,string字符串中包含了大量的方法,这些方法使得字符串的操作变得更加简单,string的使用,往往贯穿于整个蓝桥杯生涯中。
C++中将字符串直接作为一种类型,也就是string类型,使用string类型创建的对象就是C++的字符串。
使用C++中提供的string时,必须添加头文件<string>
string s1;
string s2 = "abc";
string的常见操作
2.1创建字符串
#define _CRT_SECURE_NO_WARNINGS
#include<string> //添加string头文件
#include<iostream>
using namespace std;
int main()
{
string s1;
string s2 = "abc";
cout << s1 << endl;
cout << s2 << endl;
return 0;
}
其中s1是空白字符串,s2是创建了abc的字符串。
- s1表示创建了一个空字符串,相当于创建整型int a,但未给a一个初始值。
- string s2表示创建一个字符串s2,它的内容是"hello world",要注意s2中的字符串不再以\0作为结束标志。
除了上面的创建字符串的写法外,还有其他一些创建字符串的方式。
string s("hello world");
string s1 = s;//用一个现成的字符串s,初始化为另外一个字符串s1
当然C++中的string创建的字符串和char类型的数组所表示的字符串还有一个区别,string类型的字符串对象可以直接赋值。
#define _CRT_SECURE_NO_WARNINGS
#include<string> //添加string头文件
#include<iostream>
using namespace std;
int main()
{
//string s1;
//string s2 = "abc";
//cout << s1 << endl;
//cout << s2 << endl;
string s("hello world");
string s1 = s;//用一个现成的字符串s,初始化为另外一个字符串s1
cout << s1 << endl;
return 0;
}
cin的方式
可以直接使用cin给string类型的字符串输入一个字符串的数据。
int main()
{
string s;
cin >> s;
cout << s << endl;
return 0;
}
这个其实适用于不带空格的字符串,但如果输入的是带空格的字符串呢,我们来看看。
你看,这样子就不可以了。
那么,我们怎么可以读取空格呢?,解决的办法就是getline
getline
第一种getline函数以换行符("\n")作为字符串的结束标志,它的一般格式为:
getline(cin, string str);
这种形式的getline函数从输入流中读取文本,直到遇到换行符('\n')为止,然后将读取的文本(不包括换行符)存储到指定的string类型的变量str中。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string name;
getline(cin,name);
cout<<name<<endl;
return 0;
}
第二种就是getlin函数允许用户自定义结束语法
#include<iostream>
#include<string>
using namespace std;
int main()
{
// string name;
// getline(cin,name);
// cout<<name<<endl;
//
// return 0;
string name;
getline(cin,name,'q');
cout<<name<<endl;
return 0;
}
你看,这样子就是以q作为了结束标志。
size()
string中提供了size()函数用于获取字符串长度。
string s;
string s1="hello";
string s2="hello world";
string s3="12ab!= ";
cout<<"s:"<<s.size()<<endl;
cout<<"s1:"<<s1.size()<<endl;
cout<<"s2:"<<s2.size()<<endl;
cout<<"s3:"<<s3.size()<<endl;
接下来,我们用这个来遍历整个字符串
string s="abcdef";
int i=0;
for(i=0;i<s.size();i++)
{
cout<<s[i]<<" ";
}
注意string类型的字符串是可以通过下标来进行访问的。
迭代器
迭代器是一种对象,它可以用来遍历容器,迭代器的作用类似于指针,或者数组下标,这就意味着,如果我们想要访问迭代器所指向的值,我们需要解引用。
begin()
begin():返回指向字符串第一个字符的迭代器,需要一个迭代器的变量来接收
end()
end():返回指向字符串最后一个字符的下一个位置的迭代器(该位置不属于字符串)
迭代器是可以进行大小比较的,也可以进行+或者-整数运算的。
同一个容器的两个迭代器也可以相减,相减结果的绝对值,是两个迭代器中间元素的个数
string s="abcdef";
string::iterator it1=s.begin();
string::iterator it2=s.end();
cout<<(it1<it2)<<endl;
cout<<abs(it1-it2)<<endl;
正序遍历
string s="abcdef";
for(auto it =s.begin();it!=s.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
for(string::iterator it=s.begin();it!=s.end();it++)
{
cout<<*it<<" ";
}
逆序遍历
string s="abcdef";
for(auto it =s.end()-1;it!=s.begin()-1;it--)
{
cout<<*it<<" ";
}
cout<<endl;
for(string::iterator it=s.end()-1;it!=s.begin()-1;it--)
{
cout<<*it<<" ";
}
使用迭代器找到元素之后,改变迭代器指向的元素,是可以直接改变字符串内容的。
string str="abcdef";
cout<<str<<endl;
for(auto i=str.begin();i<str.end();i++)
{
*i='X';
}
cout<<str<<endl;
push_back()
string s;
s.push_back('h');
s.push_back('e');
s.push_back('l');
s.push_back('l');
s.push_back('o');
cout<<s<<endl;
字符串的+和+=操作
push_back()是用于在字符串后面添加一个字符,然而部分情况下我们需要向原有的字符串后继续添加字符串。
其实string类型的字符串是支持+和+=运算的,这里的本质是string中重载了operator+=这个操作符
我们来看下下面的例子:
string s="hello";
s+="world";
cout<<s<<endl;
string s1="hello";
cout<<s1+"world"<<endl;;
s1=s1+="world";
cout<<s1<<endl;
string s2="hello";
s2="world"+s2;
cout<<s2<<endl;
pop_back()
pop_back()用于删除字符串尾部的一个字符,这个成员函数是在C++11标准中引入的,有的编译器可能不支持。
string s="hello";
cout<<s<<endl;
s.pop_back();
cout<<s<<endl;
s.pop_back();
cout<<s<<endl;
当字符串中没有字符的时候,再调用pop_back(),是会发生报错的。
你看,devC++中直接崩溃了
insert
如果我们需要在字符串中间的某个位置插入一个字符串,这个时候我们就得掌握一个函数就是insert;
函数原型如下:
string& insert(size_t pos,const string& str);//pos前面插入一个string的字符串
string& insert(size_t pos,const char*s);//pos前面插入一个C风格的字符串
string& insert(size_t pos,size_t n,char c);//pos位置前面插入n个字符c
string s="abcdefghijk";
string str="xxx";
cout<<s<<endl;
s.insert(3,str);
cout<<s<<endl;
const char*c="111";
s.insert(3,c);
cout<<s<<endl;
s.insert(3,3,'4');
cout<<s<<endl;
find()
find()函数用于查找字符串中指定子串/字符,并返回子串/字符第一次出现的位置。
返回值
若找到,返回子串/字符在字符串中第一次出现的起始下标位置。
若未找到,返回npos
string s="hello world hello everyone";
string str="llo";
size_t n=s.find(str);
cout<<n<<endl;
n=s.find("llo");
cout<<n<<endl;
n=s.find("llo",n+1);
cout<<n<<endl;
第二种用法
size_t n=s.find("word",0,3);//在s中,0这个指定位置开始查找“world中的前3个字符
cout<<n<<endl;
n=s.find("everyone",n+1,5);
查找不到的情况
string s="hello world hello everyone";
string str="bit";
size_t n=s.find(str);
cout<<n<<endl;
substr()
substr()用于截取字符串中指定位置指定长度的子串
函数原型如下:
string substr(size_t pos =0,size_t len=npos) const;
string s="hello world hello everyone";
string s1=s.substr(7);
cout<<s1<<endl;
string s2=s.substr(7,6);
cout<<s2<<endl;
to_string
tostring函数可以将数字转换成字符串
string pi=to_string(3.14159);
cout<<pi<<endl;
好了,今天的内容就到这里,我们明天再见。