您的位置:

高效处理字符串,C++ string+让你信手拈来

一、C++ string介绍

C++ string是STL(Standard Template Library)中string类的实现,它是C++中处理字符串的标准库。与char数组相比,string有以下优势:

1、string可以自动扩容,而char数组需要手动分配内存,容易发生内存溢出的问题。

2、string提供了一系列成员函数,比如substr()、find()、replace()等,这些函数可以大大方便我们对字符串的操作。

3、string可以与stringstream结合使用,实现字符串与其他类型之间的转换。

二、C++ string的基本用法

1、声明和初始化

    string str1;                //默认构造函数,创建一个空的字符串
    string str2("hello world"); //使用字符串字面值初始化字符串
    string str3(str2);          //使用另一个字符串初始化字符串
    string str4(10, 'a');       //使用字符和长度初始化字符串,创建"aaaaaaaaaa"的字符串

2、字符串输入输出

    string s;
    cin>> s;     //以空格或者换行符为分隔符,输入一段字符串
    getline(cin, s);   //输入一行字符串
    cout<< s <

   

3、字符串截取和查找

    string s("hello world");
    string s1 = s.substr(0,5);  //截取前5个字符,s1="hello"
    int pos = s.find("world");  //查找第一次出现"world"的位置,pos=6

三、C++ string的高级用法

1、正则表达式匹配

C++11引入了库,可以使用正则表达式对字符串进行匹配和替换。

    string s("hello world");
    regex r("\\w+");    //定义一个正则表达式,匹配单词
    sregex_iterator it(s.begin(), s.end(), r);
    sregex_iterator end_it;
    while(it != end_it)
    {
        cout<< it->str() <

     

2、字符串和数字之间的转换

通过stringstream,可以将字符串和数字之间相互转换。

    int num = 1234;
    string s;
    stringstream ss;
    ss<< num;      //将数字转换为字符串
    ss>> s;        //将字符串转换为数字

四、C++ string的性能优化

1、避免频繁创建字符串

由于string可以自动扩容,因此频繁地创建和销毁string对象会导致性能降低。应该尽量避免不必要的string对象的创建和销毁,尽可能重复使用string对象。

    //不推荐的写法
    string s1 = "hello";
    string s2 = "world";
    string s = s1 + s2;   //每次都会创建新的string对象

    //推荐的写法
    string s1 = "hello";
    string s2 = "world";
    s1 += s2;   //重复利用s1对象

2、使用reserve()预分配内存

由于string的自动扩容可能导致不必要的内存拷贝,可以通过reserve()函数提前预分配好足够的内存,减少内存拷贝的次数。

    string s;
    s.reserve(1000);  //提前预分配1000个字符长度的内存空间
    for(int i=0; i<1000; ++i)
    {
        s += 'a';     //每次只需要改变字符即可,不需要内存重分配
    }

五、完整C++ string代码示例

#include 
#include 
       
#include 
        
#include 
         
using namespace std;

int main()
{
    //声明和初始化
    string str1;                //默认构造函数,创建一个空的字符串
    string str2("hello world"); //使用字符串字面值初始化字符串
    string str3(str2);          //使用另一个字符串初始化字符串
    string str4(10, 'a');       //使用字符和长度初始化字符串,创建"aaaaaaaaaa"的字符串

    //字符串输入输出
    string s;
    cin>> s;     //以空格或者换行符为分隔符,输入一段字符串
    getline(cin, s);   //输入一行字符串
    cout<< s <
          str() <
           
            > s; //将字符串转换为数字 return 0; }