C++(19): C++:std::string的使用

1. 简述

        C++的 std::string 类是C++标准库中的一个非常重要的类,用于表示和操作字符串。std::string 提供了大量的成员函数,可以方便地对字符串进行各种操作,如连接、比较、查找、替换等。相比于C语言的字符数组,std::string 更加安全,易于使用,且功能更加强大。

2. std::string初始化

        std::string有多重初始化的方式,具体可参照如下。

std::string str1;                   ///< 创建一个空字符串, 通过empty()判断会返回true.

std::string str2 = "Hello, China!"; ///< 通过C风格字符串初始化  

std::string str3("Hello, China!");  ///< 通过构造函数初始化  

std::string str4 = str33;           ///< 通过其他std::string对象初始化  

std::string str5(10, 's');          ///< 创建一个由10个'a'字符组成的字符串

3. std::string操作

(1)访问字符

        std::string访问其中的字符可以直接使用下标(一般内存连续的对象访问都可以使用下标)。

std::string s = "Hello";  

s[0] = 'h'; ///< 将第一个字符修改为'h'

(2)追加字符串

        std::string提供了append来追加字符串,同时也重载了operator+来实现追加操作。

std::string s1 = "Hello";  

std::string s2 = " World";  

s1.append(s2); ///< s1现在为"Hello World"  

s1 = s1 + "!"; ///< s1现在为"Hello World!"

(3)查找子字符串

        std::string提供了find和rfind来查找子字符串,返回子字符串所在的索引位置。

std::string s = "Hello, World!";  

size_t pos_0 = s.find("World");  ///< pos_0现在为7,即"World"在s中的开始位置

size_t pos_1 = s.rfind("World"); ///< pos_1现在为7,即"World"在s中的开始位置

(4)替换子字符串

        std::string提供了replace来替换子字符串,其原型如下:

std::string& replace (size_t pos, size_t len, const string& str);

        其中,pos为要被替换的起始位置,len为要被替换的字符串长度,str为要被替换的字符串。

使用示例如下。

std::string s = "Hello, World!";  

s.replace(0, 5, "Universe"); ///< s现在为"Hello, Universe!"

(5)插入子字符串

        std::string提供了insert来执行子字符串的插入,insert的原型如下。

 string& insert (size_t pos, const string& str);

 string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);    

 string& insert (size_t pos, const char* s);

 string& insert (size_t pos, const char* s, size_t n);

 string& insert (size_t pos, size_t n, char c);

        典型的使用例程如下。

std::string s = "Hello";  

s.insert(s.length(), " World"); ///< s现在为"Hello World"  

(6)删除子字符串

        std::string提供了erase来执行子字符串的删除,原型如下。

string& erase(int pos=0, int n=npos);

        pos指定要删除的子字符串起始位置,n指定要删除的子字符串的结束位置。

        使用例程如下。

std::string s = "Hello";  

s.erase(s.find(" "), 1); ///< s现在为"HelloWorld"

(7)获取字符串长度

        std::string提供了length()来获取指定字符串的长度,使用例程如下。

std::string s = "Hello, World!";  

size_t len = s.length(); ///< len现在为13

(8)字符串判空

        std::string提供了empty()来判断指定字符串是否为空,空返回true,否则返回false。

(9)与C风格互转

        std::string可以与C风格的char*进行互转。

        std::string转char*: 使用c_str()或data(),可以获得char*型指针。

        char*转std::string: 通过直接赋值进行转换。

(10)比较字符串

        可以使用 ==、!=、<、>、<=、>= 等操作符来比较两个字符串。

        判断相等还是不相等,取决于所有的字符串是否全部一致。

        大于和小于,取决于第一个不相等的字符的ASCII码。

        判断=>和=<可参照如下例程进行理解。

#include <iostream>  

#include <string>  

 

int main(int argc, char* argv[])

{

    std::string str1 = "apple";  

    std::string str2 = "banana";  

    std::string str3 = "app";  

 

    if (str1 >= str2) {  

        std::cout << "str1 is greater than or equal to str2" << std::endl;  

    } else {  

        std::cout << "str1 is less than str2" << std::endl;  

    }  

 

    if (str1 <= str3) {  

        std::cout << "str1 is less than or equal to str3" << std::endl;  

    } else {  

        std::cout << "str1 is greater than str3" << std::endl;  

    }  

 

    return 0;  

}

        在这个例子中,第一个判断 str1 >= str2 会评估为 false,因为 "apple" 字典顺序上小于 "banana"。第二个判断 str1 <= str3 也会评估为 false,因为 "apple" 字典顺序上大于 "app"。

        字符串的比较是基于字符的ASCII值进行的,因此它是区分大小写的,大写字母在ASCII表中排在小写字母前面。例如,"A" 的ASCII值小于 "a" 的ASCII值,所以字符串 "Apple" 会被认为小于字符串 "apple"。

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值