C++手稿:std::string

字符串在很多编程语言中已经成为基本数据类型,C语言中我们使用char*来手动申请和维护字符串, 在C++中,可以使用std::string来方便地创建和操作字符串。

string是一个模板类,它有basic_string<T>定义:

typedef basic_string<char> string;

C++的string可以通过成员方法c_str()转换为C语言的char*

参考文档:cplusplus.com/string

初始化与赋值

string有两个常用的构造函数:

// 用一个C字符串构造
string str("hello");
// 等价于
string str = "hello";

也可以用N个同样的字符来构造字符串:string str2(8, 'x')

在C0x标准中,std::to_string可以将很多类型转换为一个string,可以代替itoa,例如:

string str = to_string(123);

string构造函数不接受charint类型。

字符串可以直接互相赋值,内存会自动拷贝和销毁,我们大可不必管它。对于单个字符赋值可以使用下标运算符:

for(int i=0;i<str.length(); i++){
    str[i] = 'a';
}

与多数class类似,string也提供了swapstr1.swap(s2)将会交换二者的值。

运算符支持

有通用运算符支持的数据类型往往更容易理解和操作,其中最讨人喜欢的莫过于+运算符:

str += str2;
str = str + "hello";

当然,你也可以直接调用append方法:str.append(str2)

除了+string还支持一系列的比较运算符:<==><=>=!=

当然,你仍然可以直接调用compare方法:str1.compare(str2)str1小则会返回-1

长度

  • 字符串为空
    • empty():返回是否为空。
    • clear():清空字符串。
  • 字符串长度
    • length():等效于size(),返回字符串长度。
    • resize(10, 'x'):改变长度,如果超过了原有长度,后面补x,第二个参数默认值为null。
  • 字符串内存
    • capacity():无需再次申请内存可存放的字符数。
    • reserve(10):申请10字符的内存,通常在大量的insert前先reserve一下,避免多次申请内存。

查找

  • str.find("ll"):字符串llstr中第一次出现的下标,未找到为string::npos
  • str.rfind("ll"):同上,从右向左查找。
  • str.find("ll", 3):从下标3开始查找。

修改

  • erase(5):去掉下标5开始的所有字符。
  • replace(2, 3, "ll"):下标2开始的3个字符换成"ll"
  • insert(2, "ll"):下标2处插入"ll"

流处理

在C++中,标准输入输出、文件、字符串都可以作为一个流,来接受输入或者输出。 在C++中字符串流也是格式化输出的一种常用手段。

string input("test 123");
istringstream sinput(input);

string str;
int i;
sinput >> str >> i;

ostringstream soutput;
soutput << str << i;
cout<< soutput.str();
// test123
C++std::string是一个用于处理字符串的标准库类。它具有多种初始化方式,可以创建空字符串、包含指定内容的字符串等。例如,可以使用以下方式进行字符串的初始化: - 使用默认构造函数创建一个空字符串:std::string str; - 使用括号初始化语法创建一个包含指定内容的字符串:std::string str("hello"); - 使用赋值语句创建一个包含指定内容的字符串:std::string str = "world"; std::string还支持字符串的连接操作。可以使用加号运算符或者将字符串直接连接起来实现连接操作。例如: - 使用加号运算符连接两个字符串:std::string str1 = "hello"; std::string str2 = "world"; std::string str3 = str1 + ", " + str2; // str3 等于 "hello, world" 此外,std::string还提供了一些用于字符串处理的函数和方法。例如,可以使用remove_if函数结合迭代器来移除字符串中的特定字符或字符范围。例如: - 使用std::remove_if函数移除字符串中的空格字符: std::string name = "John Doe"; std::string::iterator newend = std::remove_if(name.begin(), name.end(), iswhitespace); 此处的iswhitespace是一个判断字符是否为空格的谓词函数。 总结起来,C++std::string类提供了多种初始化方式、字符串连接操作以及一些用于字符串处理的函数和方法。通过这些功能,我们可以方便地进行字符串的操作和处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++ 基础: std::string](https://blog.csdn.net/weixin_39568531/article/details/129657195)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++ 标准程序库std::string 详解](https://blog.csdn.net/CHYabc123456hh/article/details/108879371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值