C++中string详解与⽤法
string详解
string不是基本数据类型,是C++中对char封装成的类,所以C语⾔中没有string。
String类是不可变的,对String类的任何改变,都是返回⼀个新的String类对象。
头⽂件:  #include<string>
构造函数
string s1();  //s1为空
string s2("hello");
string s3(4,'w');    //s3="wwww";
string s4("12345",1,3);  //s4="234";
//不能直接string s('w');
string初始化
//拷贝赋值
string s1;
s1 = "Hello";  // s1 = "Hello"
s2 = 'K';  // s2 = "K”
//利⽤assign函数
string s1("12345"), s2;
s3.assign(s1);  // s3 = s1
s2.assign(s1, 1, 2);  // s2 = "23",即 s1 的⼦串(1, 2)
s2.assign(4, 'K');  // s2 = "KKKK"
s2.assign("abcde", 2, 3);  // s2 = "cde",即 "abcde" 的⼦串(2, 3)
/
/利⽤+
string s;
s+=a[i];
//利⽤substr函数
string s1,s2;
s1="hello";
s2=s1.substr(0,3);  //s2="hel";
string 函数⽤法
append()函数
除了可以使⽤+和+=运算符对 string 对象执⾏字符串的连接操作外,string 类还有 append 成员函数,可以⽤来向字符串后⾯添加内容。append 成员函数返回对象⾃⾝的引⽤。
string s1("123"), s2("abc");  //以下操作为平⾏操作
s1.append(s2);  // s1 = "123abc"
s1.append(s2, 1, 2);  // s1 = "123bc"
s1.append(3, 'K');  // s1 = "123KKK"
s1.append("ABCDE", 2, 3);  // s1 = "123CDE",添加 "ABCDE" 的⼦串(2, 3)
compare()函数
⽤于⽐较字符串。compare 成员函数有以下返回值:
-1 表⽰当前的字符串⼩;
0 表⽰两个字符串相等;
1 表⽰另⼀个字符串⼩。
compare()⽐较时逐字符⽐较的,⼀旦能⽐较出结果,就不再⽐较了。
string s1="abandon";
string s2="about";
int b=s1pare(s2);//直接⽐较,s1⼩于s2,故返回-1
cout<<b<<endl;
int c=s1pare(2,4,s2);//s1下标为2的字符a开始的4个字符ando和s2进⾏⽐较。ando⼤于s2故返回1
cout<<c<<endl;
int d=s1pare(2,4,s2,1,3);
cout<<d<<endl;//s1下标为2的字符a开始的4个字符ando和s2下标为1的字符b开始的3个字符bou⽐较。前者⼩,故返回-1。
string s3="abc";
string s4="abc";
int e=s3pare(s4);//相等返回0
cout<<e<<endl;
swap()交换string对象的内容
string s1("hello");
string s2("hi");
s1.swap(s2);
find()函数返回⼦串的下标位置
/*
string的find()函数⽤于出字母在字符串中的位置。
find(str,position)
find()的两个参数:
str:是要的元素
position:字符串中的某个位置,表⽰从从这个位置开始的字符串中指定元素。
可以不填第⼆个参数,默认从字符串的开头进⾏查。
返回值为⽬标字符的位置,当没有到⽬标字符时返回npos。
*/
string s = "hello world!";
cout << s.find("e") << endl;  // 1
string s = "hello world!";
if (s.find("a") == s.npos) {
cout << "404 not found" << endl;
}
string s = "hello world!";
cout << s.find("l",5) << endl;  //9
//到⽬标字符在字符串中第⼀次出现和最后⼀次出现的位置
string s = "hello world!";
cout << "first time occur in s:"<<s.find_first_of("l") << endl;    // 2
cout << "last time occur in s:" << s.find_last_of("l") << endl;    // 9
//反向查
string s = "hello world!";
cout << s.rfind("l") << endl;
C++string中的insert()函数⽤法详解
C++string中的insert()插⼊函数
basic_string& insert (size_type pos, const basic_string& str);
在原串下标为pos的字符前插⼊字符串str
basic_string& insert (size_type pos, const basic_string& str, size_type pos1, size_type n); str从下标为pos1开始数的n个字符插在原串下标为pos的字符前
basic_string& insert (size_type pos, size_type n, char c);
在原串下标为pos的字符前插⼊n个字符c
#include<iostream>
using namespace std;
int main()
{
string str="hello";
string s="Hahah";
str.insert(1,s);//在原串下标为1的字符e前插⼊字符串s
cout<<str<<endl;        // "Hhelloahah"
string str1="hello";
char c='w';
str1.insert(4,5,c);//在原串下标为4的字符o前插⼊5个字符c
cout<<str1<<endl;            //  helloccccco
string str2="hello";
string s2="weakhaha";
str2.insert(0,s2,1,3);//将字符串s2从下标为1的e开始数3个字符,分别是eak,插⼊原串的下标为0的字符h前    cout<<str2<<endl;            // eakhello
return 0;
}
substr()⽤法
substr(pos,n)
返回⼀个string,包含从pos开始的n个字符的拷贝
pos默认值是0,n的默认值是size()-pos,即不加参数会默认拷贝整个string
若pos的值超过string的⼤⼩,则substr函数会抛出⼀个out_of_range异常
若pos+n的值超过了string的⼤⼩,则substr会调整n的值,只拷贝到string的末尾
#include<string>
#include<iostream>
using namespace std;
int main()
{
  string s("12345asdf");
  string a = s.substr(0,5);    //获得字符串s中从第0位开始的长度为5的字符串
  cout << a << endl;
}
//a为 12345
⼀个经典⽤法
(s+s).substr(n,s.size());
/*  string s="abcdefg";
将前n个字符移动到尾部
例如移动前2个字符
ss="cdefgab";
*/
replace() 函数对string对象中的⼦串进⾏替换,返回值为对象⾃⾝的引⽤
//⽤str替换指定字符串从起始位置pos开始长度为len的字符
string& replace (size_t pos, size_t len, const string& str);
string s="12345";
place(2,3,"aa");  //s="12aa";
//⽤str替换迭代器起始位置和结束位置的字符
string& replace (const_iterator i1, const_iterator i2, const string& str);
string s="12345";
place(s.begin(),s.begin()+3,"aaa");  //s="aaa45";
string s1("Real Steel");
cout << s1 << endl;  //输出 R3456 Steel
string s2("Harry Potter");
cout << s2 << endl;  //输出 HaOOOOO Potter
int n = s2.find("OOOOO");  //查⼦串 "00000" 的位置,n=2
cout << s2 < < endl;  //输出 HaXXX Potter
to_string()函数把数值类型如int、double、long等转化为string
int a = 4;
double b = 3.14;
string str1, str2;
str1 = to_string(a);
str2 = to_string(b);
cout << str1 << endl;
cout << str2 << endl;
stoi() 和atoi() 函数将字符串转化为int型
区别是stoi的形参是const string*,⽽atoi的形参是const char*。c_str()的作⽤是将const string*转化为const char*
string s1("1234567");
char* s2 = "1234567";
int a = stoi(s1);
int b = atoi(s2);
int c = atoi(s1.c_str());
cout << a << endl;c++string类型
cout << b << endl;
cout << c << endl;
reverse()函数翻转字符串
string s="12345";
reverse(str.begin(),d());
reverse(str.begin(),str.begin()+3);
assign()函数 常⽤于赋值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。