[UE4]C++string的⽤法和例⼦
使⽤场合:
string是C++标准库的⼀个重要的部分,主要⽤于字符串处理。可以使⽤输⼊输出流⽅式直接进⾏操作,也可以通过⽂件等⼿段进⾏操作。同时C++的算法库对string也有着很好的⽀持,⽽且string还和c语⾔的字符串之间有着良好的接⼝。虽然也有⼀些弊端,但是瑕不掩瑜。其中使⽤的代码多数都是来⾃cpp官⽹,因为例⼦⾮常全。
声明和初始化⽅法:
想使⽤string⾸先要在头⽂件当中加⼊< string >
声明⽅式也很简单
声明:
string s;//声明⼀个string 对象
string ss[10];//声明⼀个string对象的数组
初始化:
使⽤等号的初始化叫做拷贝初始化,不使⽤等号的初始化叫做直接初始化。
复制代码
#include <bits/stdc++.h>
using namespace std; //注意:如果没有这⼀⾏,则需要写成std::string
int main()
{
ios::sync_with_stdio(false);
string s;//默认初始化,⼀个空字符串
string s1(“ssss”);//s1是字⾯值“ssss”的副本
string s2(s1);//s2是s1的副本
string s3=s2;//s3是s2的副本
string s4(10,‘c’);//把s4初始化
string s5=“hiya”;//拷贝初始化
string s6=string(10,‘c’);//拷贝初始化,⽣成⼀个初始化好的对象,拷贝给s6
//string s(cp,n)
char cs[]="12345";
string s7(cs,3);//复制字符串cs的前3个字符到s当中
//string s(s2,pos2)
string s8="asac";
string s9(s8,2);//从s2的第⼆个字符开始拷贝,不能超过s2的size
//string s(s2,pos2,len2)
string s10="qweqweqweq";
string s11(s10,3,4);//s4是s3从下标3开始4个字符的拷贝,超过s3.size出现未定义
return 0;
}
复制代码
字符串处理:
substr操作:
注意substr没有迭代器作为参数的操作
复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
string s=“abcdefg”;
//s.substr(pos1,n)返回字符串位置为pos1后⾯的n个字符组成的串
string s2=s.substr(1,5);//abcde
//s.substr(pos)//得到⼀个pos到结尾的串
string s3=s.substr(4);//efg
return 0;
}
复制代码
如果输⼊的位置超过字符的长度,会抛出⼀个out_of_range的异常
insert操作:
代码来⾃cpp官⽹,经过⾃⼰的整理
注意⽤迭代器当参数和⽆符号数当参数的区别
复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
string str=“to be question”;
string str2="the ";
string str3=“or not to be”;
string::iterator it;
//s.insert(pos,str)//在s的pos位置插⼊str
str.insert(6,str2);                // to be the question
//s.insert(pos,str,a,n)在s的pos位置插⼊str中插⼊位置a到后⾯的n个字符
str.insert(6,str3,3,4);            // to be not the question
//s.insert(pos,cstr,n)//在pos位置插⼊cstr字符串从开始到后⾯的n个字符
str.insert(10,"that is cool",8);    // to be not that is the question
//s.insert(pos,cstr)在s的pos位置插⼊cstr
str.insert(10,"to be ");            // to be not to be that is the question
/
/s.insert(pos,n,ch)在s.pos位置上⾯插⼊n个ch
str.insert(15,1,':');              // to be not to be: that is the question
//s.insert(s.it,ch)在s的it指向位置前⾯插⼊⼀个字符ch,返回新插⼊的位置的迭代器
it = str.insert(str.begin()+5,','); // to be, not to be: that is the question
//s.insert(s.it,n,ch)//在s的it所指向位置的前⾯插⼊n个ch
str.insert (d(),3,'.');      // to be, not to be: that is
//s.insert(it,str.ita,str.itb)在it所指向的位置的前⾯插⼊[ita,itb)的字符串
str.insert (it+2,str3.begin(),str3.begin()+3); // to be, or not to be: that is return 0;
}
复制代码
erase操作:
⽤来执⾏删除操作
删除操作有三种
指定pos和len,其中pos为为起始位置,pos以及后⾯len-1个字符串都删除
迭代器,删除迭代器指向的字符
迭代器范围,删除这⼀范围的字符串,范围左闭右开
代码来⾃cpp官⽹
复制代码
#include
#include
int main ()
{
std::string str (“This is an example sentence.”);
std::cout << str << ‘\n’;
// “This is an example sentence.”
//直接指定删除的字符串位置第⼗个后⾯的8个字符
std::cout << str << ‘\n’;
// “This is an sentence.”
//删除迭代器指向的字符
std::cout << str << ‘\n’;
// “This is a sentence.”
/
/ ^^^^^
//删除迭代器范围的字符
std::cout << str << ‘\n’;
// “This sentence.”
return 0;
}
复制代码
append和replace操作:
append函数可以⽤来在字符串的末尾追加字符和字符串。由于string重载了运算符,也可以⽤+=操作实现repalce顾名思义,就是替换的意思,先删除,后增加。
代码来⾃cpp官⽹,附上⾃⼰的解释
复制代码
#include
#include
int main ()
{
std::string str;
std::string str2="Writing ";
std::string str3=“print 10 and then 5 more”;
//直接追加⼀个str2的字符串
str.append(str2);                      // "Writing "
//后⾯追加str3第6个字符开始的3个字符串
str.append(str3,6,3);                  // "10 "
//追加字符串形参的前5个字符
str.append("dots are cool",5);          // "dots "
//直接添加
str.append("here: ");                  // "here: "
//添加10个'.'
str.append(10u,'.');                    // ".........."
//添加str3迭代器范围的字符串
str.append(str3.begin()+d());  // " and then 5 more"
//最后这个⽐较特殊,意思是添加5个'A',实际上参数⾥⾯的65对应的asc码就是65
str.append<int>(5,65);                // "....."
/
/字符串追加也可以⽤重载运算符实现
str+="lalala";
std::cout << str << '\n';
c++中string的用法return 0;
}
复制代码
replace的使⽤⽅法,replace⽀持使⽤⽆符号整数寻位置,也⽀持⽤迭代器寻位置
复制代码
#include
#include
int main ()
{
std::string base=“this is a test string.”;
std::string str2=“n example”;
std::string str3=“sample phrase”;
std::string str4=“useful.”;
// replace signatures used in the same order as described above:
// Using positions:                0123456789*123456789*12345
std::string str=base;          // "this is a test string."
//第9个字符以及后⾯的4个字符被str2代替
//第19个字符串以及后⾯的5个字符⽤str的第7个字符以及后⾯的5个字符代替
//第8个字符以及后⾯的9个字符⽤字符串参数代替
//第8个字符以及后⾯的5个字符⽤字符串参数的前7个字符替换
//第22以及后⾯的0个字符⽤3个叹号替换
//迭代器的原理同上
// Using iterators:                                              0123456789*123456789*
std::cout << str << '\n';
return 0;
}
复制代码
以上的replace操作可以⽤insert和erase的操作组合替换,但是replace操作更加⽅便。
assign操作:
assign操作在⼀起列容器当中都存在,⽐如vector等等。是⼀个很基本的操作函数,string使⽤assign可以灵活的对其进⾏赋值。代码来⾃cpp官⽹
复制代码
#include
#include
int main ()
{
std::string str;
std::string base=“The quick brown fox jumps over a lazy dog.”;
// used in the same order as described above:
//直接把base赋值给str
str.assign(base);
std::cout << str << '\n';
//把base第10个字符以及后⾯的8个字符赋给str
str.assign(base,10,9);
std::cout << str << '\n';        // "brown fox"
//把参数中的0到6个字符串赋给str
str.assign("pangrams are cool",7);
std::cout << str << '\n';        // "pangram"
//直接使⽤参数赋值
str.assign("c-string");
std::cout << str << '\n';        // "c-string"
//给str赋值10个'*'字符
str.assign(10,'*');
std::cout << str << '\n';        // "**********"
/
/赋值是10个'-'
str.assign<int>(10,0x2D);
std::cout << str << '\n';        // "----------"
//指定base迭代器范围的字符串
str.assign(base.begin()+d()-12);
std::cout << str << '\n';        // "fox jumps over"
return 0;
}
复制代码
string的搜索操作:
string类中提供了很多性能优秀,使⽤⽅便的成员⽅法。⽽且在泛型算法当中也有很多实⽤的技巧。
find和rfind函数:
find函数主要是查⼀个字符串是否在调⽤的字符串中出现过,⼤⼩写敏感。
代码来⾃cpp官⽹
复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
std::string str (“There are two needles in this haystack with needles.”);
std::string str2 (“needle”);

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