#### 15. 字符串
C++ 提供了以下两种类型的字符串表示形式:
* C 风格字符串
* C++ 引入的 string 类类型
**C 风格字符串:**
在上一篇文章中我们学习了 C 中定义字符串,这里我们在复习下,看下面示例:
~~~
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
//等同于如下定义
char greeting[] = "Hello";
~~~
以下是 C/C++ 中定义的字符串的内存表示:
其实,您不需要把 *null* 字符放在字符串常量的末尾。C++ 编译器会在初始化数组时,自动把 '\\0' 放在字符串的末尾。让我们尝试输出上面的字符串:
![](https://user-gold-cdn.xitu.io/2020/1/6/16f7b4f229468cc5?imageView2/0/w/1280/h/960/format/webp/ignore-error/1)
其实,您不需要把 *null* 字符放在字符串常量的末尾。C++ 编译器会在初始化数组时,自动把 '\\0' 放在字符串的末尾。
例子:
~~~
void test13() {
char message[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '\0'};
cout << message << endl;
}
复制代码
~~~
> **输出:**
>
> 123456789
C++ 中有大量的函数用来操作以 null 结尾的字符串:supports a wide range of functions that manipulate null-terminated strings:
| 序号 | 函数 & 目的 |
| --- | --- |
| 1 | **strcpy(s1, s2);** 复制字符串 s2 到字符串 s1。 |
| 2 | **strcat(s1, s2);** 连接字符串 s2 到字符串 s1 的末尾。 |
| 3 | **strlen(s1);** 返回字符串 s1 的长度。 |
| 4 | **strcmp(s1, s2);** 如果 s1 和 s2 是相同的,则返回 0;如果 s1s2 则返回值大于 0。 |
| 5 | **strchr(s1, ch);** 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 |
| 6 | **strstr(s1, s2);** 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |
下面的实例使用了上述的一些函数:
~~~
void test13() {
char ctr1[20] = "网名:";
char ctr2[50] = "个人Blog地址:";
int ctr1Len, ctr2Len;
strcat(ctr1, "DevYK");
strcat(ctr2, "https://www.devyk.top");
cout << "ctr1\t" << ctr1 << "\n" << "ctr2\t" << ctr2 << endl;
ctr1Len = strlen(ctr1);
ctr2Len = strlen(ctr2);
cout << "ctr1Len" << setw(10) << ctr1Len << "\nctr2Len" << setw(10) << ctr2Len << endl;
}
复制代码
~~~
> **输出:**
>
> ctr1 网名:DevYK ctr2 个人Blog地址:[www.devyk.top](https://www.devyk.top) ctr1Len 12 ctr2Len 38
**C++ 中的 String:**
C++ 标准库提供了 **string** 类类型,支持上述所有的操作,另外还增加了其他更多的功能。我们将学习 C++ 标准库中的这个类,现在让我们先来看看下面这个实例:
现在您可能还无法透彻地理解这个实例,因为到目前为止我们还没有讨论类和对象。所以现在您可以只是粗略地看下这个实例,等理解了面向对象的概念之后再回头来理解这个实例。
~~~
#include <iostream>
#include <string>
int main(){
test13();
return 0;
}
void test13() {
printf("\n\n\nstring 类型字符串");
string meg[10] = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};
cout << meg << endl;
//定义 string 变量
string str1add, str2add;
int str1Len, str2Len;
//init
string str1 = "网名:";
string str2 = "个人Blog地址:";
//追加到 str 末尾
str1add = str1.append("DevYK");
str2add = str2.append("https://www.devyk.top");
cout << "str1\t" << str1 << "\n" << "str2\t" << str2 << endl;
str1Len = str1add.length();
str2Len = str2add.size();
cout << "str1Len" << setw(10) << str1Len << "\nstr2Len" << setw(10) << str2Len << endl;
}
复制代码
~~~
> **输出:**
>
> string 类型字符串0x7ffee9b98550 str1 网名:DevYK str2 个人Blog地址:[www.devyk.top](https://www.devyk.top) str1Len 12 str2Len 38
- 前言
- JNI基础知识
- C语言知识点总结
- ①基本语法
- ②数据类型
- 枚举类型
- 自定义类型(类型定义)
- ③格式化输入输出
- printf函数
- scanf函数
- 编程规范
- ④变量和常量
- 局部变量和外部变量
- ⑤类型转换
- ⑥运算符
- ⑦结构语句
- 1、分支结构(选择语句)
- 2、循环结构
- 退出循环
- break语句
- continue语句
- goto语句
- ⑧函数
- 函数的定义和调用
- 参数
- 函数的返回值
- 递归函数
- 零起点学通C语言摘要
- 内部函数和外部函数
- 变量存储类别
- ⑨数组
- 指针
- 结构体
- 联合体(共用体)
- 预处理器
- 预处理器的工作原理
- 预处理指令
- 宏定义
- 简单的宏
- 带参数的宏
- 预定义宏
- 文件包含
- 条件编译
- 内存中的数据
- C语言读文件和写文件
- JNI知识点总结
- 前情回顾
- JNI规范
- jni开发
- jni开发中常见的错误
- JNI实战演练
- C++(CPP)在Android开发中的应用
- 掘金网友总结的音视频开发知识
- 音视频学习一、C 语言入门
- 1.程序结构
- 2. 基本语法
- 3. 数据类型
- 4. 变量
- 5. 常量
- 6. 存储类型关键字
- 7. 运算符
- 8. 判断
- 9. 循环
- 10. 函数
- 11. 作用域规则
- 12. 数组
- 13. 枚举
- 14. 指针
- 15. 函数指针与回调函数
- 16. 字符串
- 17. 结构体
- 18. 共用体
- 19. typedef
- 20. 输入 & 输出
- 21.文件读写
- 22. 预处理器
- 23.头文件
- 24. 强制类型转换
- 25. 错误处理
- 26. 递归
- 27. 可变参数
- 28. 内存管理
- 29. 命令行参数
- 总结
- 音视频学习二 、C++ 语言入门
- 1. 基本语法
- 2. C++ 关键字
- 3. 数据类型
- 4. 变量类型
- 5. 变量作用域
- 6. 常量
- 7. 修饰符类型
- 8. 存储类
- 9. 运算符
- 10. 循环
- 11. 判断
- 12. 函数
- 13. 数学运算
- 14. 数组
- 15. 字符串
- 16. 指针
- 17. 引用
- 18. 日期 & 时间
- 19. 输入输出
- 20. 数据结构
- 21. 类 & 对象
- 22. 继承
- 23. 重载运算符和重载函数
- 24. 多态
- 25. 数据封装
- 26. 接口(抽象类)
- 27. 文件和流
- 28. 异常处理
- 29. 动态内存
- 30. 命名空间
- 31. 预处理器
- 32. 多线程
- 总结
- 音视频学习 (三) JNI 从入门到掌握
- 音视频学习 (四) 交叉编译动态库、静态库的入门学习
- 音视频学习 (五) Shell 脚本入门
- 音视频学习 (六) 一键编译 32/64 位 FFmpeg 4.2.2
- 音视频学习 (七) 掌握音频基础知识并使用 AudioTrack、OpenSL ES 渲染 PCM 数据
- 音视频学习 (八) 掌握视频基础知识并使用 OpenGL ES 2.0 渲染 YUV 数据
- 音视频学习 (九) 从 0 ~ 1 开发一款 Android 端播放器(支持多协议网络拉流/本地文件)
- 音视频学习 (十) 基于 Nginx 搭建(rtmp、http)直播服务器
- 音视频学习 (十一) Android 端实现 rtmp 推流
- 音视频学习 (十二) 基于 FFmpeg + OpenSLES 实现音频万能播放器
- 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)