C++ string和char的笔记

本文详细介绍了C++中std::string与char*的区别,包括内存管理、操作便捷性、安全性等方面,并展示了两者之间的转换方法,如赋值、合并、长度获取、替换等操作,强调了std::string在字符串操作上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ 的 std::string 有什么缺点? - 知乎

C++之string类型详解 - 百度文库

1 - string是char的定义

string

         string是C++标准库(STL)中的类型,是一个,定义在 < string > 头文件中。里面包含了对字符串的各种常用操作,它较 char* 的优势是内容可以动态拓展,以及对字符串操作的方便快捷,用+号进行字符串的连接是最常用的操作。
char*

        char* 是一个指向字符的指针,是一个内置类型。可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。我们更多的时候是用的它的第二的功能,来表示一个字符串,功能与字符串数组char ch[n]一样,表示字符串时,最后有一个 '\0’结束符作为字符串的结束标志

2 - 区别

         研究区别首先要看一下char、char*、与string分别属于的指针、数组、对象。从这三个类型基本就可以看出区别在哪里。

char *s1; //s1是指向字符串的指针
char s2[1]; //s2是字符类型的一维数组
string s3; //s3是string类的对象

区别:

(1)char*与char[]

1 - char *a
    a是一个指向已知字符串的指针,实质是指针。
2 - char arr[]
    arr本身是一个字符串数组,arr指向该数组的第一个元素,实质是数组。
3 - char*a 与char arr[]
[1] 赋值区别
char s1[5];
char *s2;
s1 = "abcd";  //error
s2 = "abcd";  //correct

//s1是数组的名字,当成是常量指针,不可以作为左值修改。
//s2是一个指针
### 关于C++ String类的学习笔记 #### 字符串长度获取 `std::string` 提供了多种方法来获取字符串的长度。其中 `length()` `size()` 函数可以返回字符串中的字符数量[^1]。 ```cpp #include <iostream> #include <string> int main() { std::string str = "example"; std::cout << "Length of the string is: " << str.length() << std::endl; } ``` #### 获取C风格字符串 为了与其他接受以null结尾的字符数组作为参数的老函数兼容,`std::string` 类提供了 `c_str()` 方法用于转换成C风格字符串。 ```cpp const char* cstr = str.c_str(); ``` #### 字符串拼接操作 可以通过重载的加号运算符或者成员函数 `append()` 来实现两个字符串之间的连接。 ```cpp // 使用 + 运算符 std::string result = str + "_appended"; // 或者使用 append 成员函数 result.append("_more"); ``` #### 插入与删除子串 对于更复杂的编辑需求,比如在指定位置插入新内容或是移除部分现有数据,则可分别调用 `insert()` 及 `erase()` 方法完成相应功能。 ```cpp // 在索引处插入其他字符串 str.insert(7, "modified"); // 删除从给定起始点到结束范围内的所有元素 str.erase(8, 5); ``` #### 查找子串的位置 当需要定位某个特定模式首次出现的地方时,应该考虑利用 `find()` 函数;如果要检测是否存在空白字符或数字字符,那么有专门针对这些情况设计好的辅助工具如 `isspace()` `isdigit()` 宏定义可供选用。 ```cpp if (str.find("sub") != std::string::npos) { // 找到了 "sub" } bool has_space = isspace(str[0]); bool contains_digit = any_of(str.begin(), str.end(), ::isdigit); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值