目录
@[TOC](string 构造函数初始化 )
@[TOC](string输入)
@[TOC](使用字符串)
#string 构造函数初始化
string类封装在string头文件里,里面封装了常用的方法,包括比较字符串、遍历、构造函数、查找以及各种访问元素的重载函数
string(const char* s) | 将指针s(以空字符为结尾的字符串)中内容赋值给string对象 |
string(size_type n,c) | 将包含n个元素的string对象,都赋为字符c |
string(const string& str) | 将string 对象赋值为str(复制构造函数) |
string(const char* s,size_type n) | 将指针s中前n个字符赋值给string对象 |
string operator+=(const string&str_1,const string& str_2);= | 将str_1和str_2连接后赋值给string对象 |
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
const char* s = "string";
string str_1(s);//将指针s内容复制到string对象中
cout << str_1 << endl;
string str_2(5, 'c');//将string对象前五个字符都赋值为字符c
cout << str_2 << endl;
string str_3(str_1);//将str_1内容复制到str_3中
cout << str_3 << endl;
string str_4(s, 3);//将str_4内容赋值为指针s前三个字符
cout << str_4 << endl;
string str_5;
str_5 = str_1 + str_2;//连接字符串
cout << str_5;
return 0;
}
代码结果:
#string 输入
对于常用的字符串,我们可能常会使用字符数组,但是字符数组需要指定长度
char str[50];
getline(cin,50);
对于字符我们往往不知道输入长度string对象可以自动调整string对象大小,使之刚好能够存储字符串。
string str;
cin>>str;
或getline(cin,str);
#使用字符串
##比较字符串
string对象还可以比较字符串,String 类对六种关系运算符都进行了重载。如果机器排列顺序中,一个对象位于另一个对象前面,则认为前者小于后者。
如果机器排列序列为ASCII码,根据ASCII码比较对象大小。string对象能与另一个string对象、C-风格字符串进行比较,C-风格字符串与string对象比较
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string str_1("cobra");
string str_2("coral");
const char str_3[10] = "cool";
if (str_1 < str_2)
{
cout << "<" << endl;
}
if (str_1 == str_3)
{
cout << "=" << endl;
}
if (str_3 != str_1)
{
cout << "!=";
}
return 0;
}
代码结果:
##确定字符串长度
size()和length()成员函数都返回字符串字符数
##搜索给定字符串
方法原型 | 描述 |
size_type find(const string& str,size_type pos=0)const | 从字符串的pos开始查找子字符串str,如果找到则返回子字符串首次出现的字符索引;否则,返回string::npos |
size_type find(const char* s,size_type pos=0)const | 从字符串pos开始查找子字符串s,如果找到,返回字符串首次出现的位置的索引,否则返回string::npos |
size_type find(const char* s,size_type pos,size_type n) | 从字符串pos位置开始查找s的前n个字符串,如果找到则返回其首次出现的位置的索引,否则返回string::npos |
size_type find(char ch, size_type pos=0) | 从字符串pos开始查找字符ch,如果找到,返回字符首次出现的位置,否则,返回string::npos |
下面我们来看看例子:
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string str_1= "string string string!";
string str_2("str");
int place_first = str_1.find("ing");//size_type find(const char* s,size_type pos=0)
cout << "first place of ing: " << place_first << endl;
int place_second = str_1.find(str_2);//size_type find(const string& str,size_type pos=0)
cout << "first place of str: " << place_second << endl;
cout << str_1.find("ring", 0, 2) << endl;//查找str_1中,ring前两个字符,起始位置为str_1初始位置
cout << str_1.find('r');//查找str_1中字符r首次出现的位置,起始位置默认为str_1初始位置
return 0;
}
运行结果:
、、
string 库还提供了相关的其他方法:rfind()、find_first_of()、find_last_of()、find_first_not_of()、find_not_last_of()。他们的用法和find()相同。rfind()方法查找字符串或字符最后一次出现的位置。
find_first_of()方法查找字符串中任意一个字符首次出现的位置.例如:
string str("string");
int where =str.find_first_of("hark");
该语句返回字符r在"string"中首次出现的位置。find_last_of()用法与此相同,只是查找最后一次r出现的位置。
##删除指定字符串
想要删除指定字符串,可以先用find()方法查找字符或字符串的位置,再用erase()函数删除
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string str_1= "string!";
int where = str_1.find("tr");//查找字符串tr出现的首个位置
str_1.erase(where,2);//从查找的首个位置开始,删除2个字符
cout << str_1;
return 0;
}
执行结果:sing!
string库提供了很多其他的方法来处理字符串我就不一一以介绍,对于可能出现的错误请指出。