c++ primer plus 第四章

数组

计算数组个数 

int length = sizeof 数组名 / sizeof(类型)

 字符串

c-风格字符串特殊的性质:以空字符(  \0  )结尾. 

c++中处理字符的函数,例如cout都是逐个处理字符串中的字符,直到空字符.

将字符串初始化为数组的方法: 双引号  " ". 数组长度需要考虑包含空字符.

sizeof 数组名 / sizeof(类型) = strlen() + 1;

单双引号的不同

char shirt_size = 's';  //字符常量

char shirt_size[2] = "S"; //包含 S 和 \0

用符号常量来定义数组长度,

cin使用空白(空格,制表符,换行符)(Space、Tab、Enter)来确定字符串的结束位置. 因此cin在读取字符数组时只读取一个单词,并自动在结尾添加空字符. 因此下述

c++之cin/cin.get/cin.getline()详解 - CTHON - 博客园 (cnblogs.com)

当使用不同的输入函数来读取字符串数组时,会有不同的影响:

  1. cin:

    char str[100]; cin >> str;
    • cin 使用空格作为分隔符,只会读取一个单词(以空格为界限)。
    • 如果用户输入的字符串包含空格,则只会读取空格前的部分。
    • 如果用户输入的字符串长度超过数组大小,会导致溢出问题。
  2. cin.get():相较于getline()检查错误更容易一些<1> cin.get() 用于从输入流中读取一个字符,包括空格和换行符。

  3. <2>cin.get(name ,size),name必须是char[] ,不能是string。但此种调用会将换行符留在输出队列中,因此在第二次调用cin.get()之前要先使用cin.get()来跨过换行符。

    <1>
    char ch; cout << "Enter a character: ";
    ch = cin.get(); 
    cout << "Character: " << ch << endl;
    
    <2>
    cin.get(name, azsize);
    cin.get(); //读取换行符
    cin.get(dessert,azsize);
  4. cin.getline():

    • cin.getline() 读取整行字符,包括空格,但不会保留换行符在输入缓冲区中。
    • 读取的字符串不会包含换行符。
    • 如果用户输入的字符串长度超过数组大小,会导致溢出问题。
  5. char str[100]; cin.getline(str, sizeof(str));

 string类

#include <string.h>

string也可作为数组使用。

string简化了字符串合并的操作。并且可以使用运算符+将两个string对象合并起来,还可使用+=

C风格字符串相关函数

strcpy(charr1,charr2); //copy charr2 to charr1

strcat (charr1,charr2); //将字符串charr2+到charr1末尾

其他的一些函数:

strcpy(dest, src): //将字符串 src 复制到字符串 dest 中,包括null终止符。
strncpy(dest, src, n): //将最多 n 个字符从字符串 src 复制到字符串 dest 中。不会自动添加null终止符。

strlen(str): //字符串 str 的长度,不包括null终止符。

strcmp(str1, str2): //比较字符串 str1 和 str2,返回一个整数表示比较结果。0 表示相等,负数表示 //str1 小于 str2,正数表示 str1 大于 str2。

strcat(dest, src): //将字符串 src 追加到字符串 dest 的末尾,并添加null终止符。

strncat(dest, src, n): //将最多 n 个字符从字符串 src 追加到字符串 dest 的末尾,并添加null终止符。

strstr(str, substr):// 在字符串 str 中查找子字符串 substr,返回一个指向第一次出现的位置的指针,如果没有找到返回 NULL。

strchr(str, c): //在字符串 str 中查找字符 c,返回一个指向第一次出现的位置的指针,如果没有找到返回 NULL。

strrchr(str, c):// 在字符串 str 中查找字符 c,返回一个指向最后一次出现的位置的指针,如果没有找到返回 NULL。

strncmp(str1, str2, n): //比较最多前 n 个字符的字符串 str1 和 str2,返回一个整数表示比较结果,用法类似于 strcmp。
str3 = str1 + str2;
====相等
strcpy(charr3,charr1);
strcat(charr3,charr2);

结构体

可以储存不同的数据类型,可以用等号=在相同的结构变量赋值,可以组成结构体数组。

结构体指针: 

定义结构体指针: 定义一个结构体指针变量,可以通过在结构体类型名称前加上指针符号 * 来实现。例如:

struct Person {
    char name[50];
    int age;
};

struct Person person1;
struct Person* ptrPerson;  // 定义结构体指针变量
ptrPerson = &person1;      // 将指针指向结构体变量

通过指针访问结构体成员: 使用箭头运算符 -> 可以通过结构体指针访问结构体的成员。

ptrPerson->age = 30;   // 访问结构体指针的成员

动态分配内存并使用指针: 使用 new 运算符(在C++中)或 malloc 函数(在C中)可以动态分配内存以存储结构体,并将返回的指针指向分配的内存。

struct Person* ptrPerson = new Person; // C++
// 或
struct Person* ptrPerson = (struct Person*)malloc(sizeof(struct Person)); // C

ptrPerson->age = 25;  // 设置结构体成员的值

// 记得释放内存
delete ptrPerson; // C++
// 或
free(ptrPerson); // C

传递结构体指针给函数: 通过将结构体指针作为参数传递给函数,可以在函数内部对结构体进行修改。

struct Person person;
struct Person* ptrPerson = &person;
modifyPerson(ptrPerson);
void modifyPerson(struct Person* p) {
    p->age += 10;
}

指向结构体数组的指针: 你可以使用指向结构体数组的指针来访问数组中的不同结构体元素。

struct Point {
    int x;
    int y;
};

struct Point points[5];  // 定义结构体数组
struct Point* ptrPoints = points;  // 指向结构体数组的指针

ptrPoints[0].x = 10; // 访问第一个结构体元素的成员
*(ptrPoints).x = 10;

 枚举

enum创建了另一种创建符号常量的方式,可代替const 和 define。

第一个值默认为0,后面没有被初始化的枚举量的值将比前面初始化的枚举量大1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值