第三章 extern "C" 与std, 字符串操作
前言 C++ 学习路线,本人主要也是为了记录一下自己的学习过程
目录
一、 extern "C"
1 如果需要在C++中调用C实现的库中的方法
需extern "C" //指示编译器这部分代码使用C的方式进行编译而不是C++
#ifdef __cplusplus
extern "C"{
#endif
void func(int x,int y);
#ifdef __cplusplus
}
#endif
二、std
std是一个c++的标准库
在使用cout需要using namesapce std;相当于java导包
cout,endl C++提供了 标准输出流
可以看到endl实际是名字空间std中的一个全局内联函数(记住std::endl是一个函数),它做了两件事:
1) 输出一个换行符(为何要输出一个换行符,如果不输出会怎么样?);
2) 调用flush
using namespace std;
char *name = "D";
int time = 8;
cout << "D:" << time << "点," << "一天天"<< endl;
三、 字符串操作
> C字符串实际上是使用 NULL字符 `'\0' `终止的一维字符数组。
```c
//字符数组 = 字符串
char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
//自动加入\0
char str2[] = "Hello";
```
#### 字符串操作
| 函数 | 描述 |
| --------------- | ------------------------------------------------------------ |
| strcpy(s1, s2); | 复制字符串 s2 到字符串 s1。 |
| strcat(s1, s2); | 连接字符串 s2 到字符串 s1 的末尾。 |
| strlen(s1); | 返回字符串 s1 的长度。 |
| strcmp(s1, s2); | 如果 s1 和 s2 相同,则返回 0;如果 s1 < s2 则返回小于0;如果 s1>s2 则返回大于0 |
| strchr(s1, ch); | 返回指向字符串 s1 中字符 ch 的第一次出现的位置的指针。 |
| strstr(s1, s2); | 返回指向字符串 s1 中字符串 s2 的第一次出现的位置的指针。 |
> 说明:strcmp:两个字符串自左向右逐个字符相比(按ASCII值大小相比较)
#### C++ string类
>C++ 标准库提供了 **string** 类类型,支持上述所有的操作,另外还增加了其他更多的功能。
```c++
#include <string>
//string 定义在 std命令空间中
usning namespace std;
string str1 = "Hello";
string str2 = "World";
// str1拼接str2 组合新的string
string str5 = str1 + str2;
// 在str1后拼接str2 str1改变
str1.append(str2);
//获得c 风格字符串
const char *s1 = str1.c_str();
//字符串长度
str1.size();
//长度是否为0
str1.empty();