GESPC++三级考试语法知识(五、字符数组 )


🌟 第一章:字符数组是什么?(小火车故事)

1、🎯 故事:

(1)在"字符王国"里,有一列小火车 🚂

每一节车厢只能坐一个字符

比如:

复制代码
H  e  l  l  o

(2)就像这样一列火车:

复制代码
[H][e][l][l][o]

2、👉 这列火车就是:字符数组(char数组)


🌟 第二章:字符数组的定义

1、🎯 写法

复制代码
char s[10];

2、👉 表示:

  • 有一个名字叫 s 的数组

  • 可以存 10个字符


🌟 第三个重要秘密:'\0'(字符串结束符)

1、🔥 这是最重要的知识点!!!

(1)在字符王国里,有一个"隐形管理员":

复制代码
'\0'

(2)👉 它的作用:

👉 表示:字符串结束了!


2、🎯 举例

复制代码
char s[6] = {'H','e','l','l','o','\0'};

(1)内存中是:

复制代码
[H][e][l][l][o][\0]

(2)👉 这才是一个完整字符串!


3、❗为什么必须有 '\0'?

因为:

👉 C++不知道字符串多长

👉 它是靠 \0 判断结束的!


🌟 第三章:更简单的写法(重点)

🎯 写法1(推荐)

复制代码
char s[] = "Hello";

(1)👉 实际存的是:

复制代码
[H][e][l][l][o][\0]

(2)👉 自动帮你加了 \0


🎯 写法2(指定大小)

复制代码
char s[10] = "Hello";

👉 实际是:

复制代码
[H][e][l][l][o][\0][ ][ ][ ][ ]

🌟 第四章:输入输出字符数组


1、🎯 输出

复制代码
#include<iostream>
using namespace std;

int main()
{
    char s[] = "Hello";
    cout << s << endl;
}

(1)👉 输出:

复制代码
Hello

(2)👉 原理:一直输出到 \0


2、🎯 cin 输入

(1)单词输入

复制代码
cin >> s;

(2)👉 只能读到:

👉 空格前!!


(3)🎯 示例

👉 输入:

复制代码
Hello World

👉代码:

复制代码
char s[20];
cin >> s;
cout << s;

👉 输出:

复制代码
Hello

3、🎯 整行输入

复制代码
cin.getline(s, 20);

👉 表示:

👉 最多读 19 个字符 + 1 个 \0


(1)🎯 示例

复制代码
char s[20];
cin.getline(s, 20);
cout << s;

👉输入:

复制代码
Hello World

👉输出:

复制代码
Hello World

🌟 第五章:访问字符数组(像数组一样用)


1、🎯 示例

复制代码
char s[] = "Hello";

cout << s[0] << endl; // H
cout << s[1] << endl; // e

2、🎯 修改字符

复制代码
s[0] = 'Y';

👉 结果:

复制代码
Yello

🌟 第六章:字符数组的遍历


🎯 方法1:for循环

复制代码
char s[] = "Hello";

for(int i = 0; s[i] != '\0'; i++)
{
    cout << s[i] << " ";
}

输出:

复制代码
H e l l o

🎯 方法2:计算长度

复制代码
int len = 0;
while(s[len] != '\0')
{
    len++;
}

👉 这就是最原始的 strlen 思想!


🌟 第七章:考试常见错误


❌ 错误1:忘记 '\0'

复制代码
char s[5] = {'H','e','l','l','o'};

👉 ❌ 不是字符串!

👉 因为没有 \0


❌ 错误2:数组太小

复制代码
char s[5] = "Hello";

👉 ❌ 错误!

👉 因为:

复制代码
Hello + \0 = 6 个

❌ 错误3:定义错误

复制代码
s[100] = 'A';

👉❌ 非法!


🌟 第八章:课堂小练习


🎯 练习1:输出字符个数

复制代码
输入:Hello
输出:5

👉 提示:遇到 \0 停止


参考代码:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    char str[100] ;  
    cin >> str;
    int count = 0;
    for (int i = 0; ; i++) {
        if (str[i] == '\0') break;  // 遇到结束符停止
        count++;
    }
    cout << count << endl;  // 输出:字符个数
    return 0;
}

🎯 练习2:统计字母个数

复制代码
输入:abc123
输出:3

参考代码:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    char str[100] ;  
    cin >> str;
    int letterCount = 0;
    
    for (int i = 0; str[i] != '\0'; i++) {
        // 判断是否为大写字母(A-Z)或小写字母(a-z)
        if ((str[i] >= 'A' && str[i] <= 'Z') || 
            (str[i] >= 'a' && str[i] <= 'z')) {
            letterCount++;
        }
    }
    
    cout << letterCount << endl;  // 输出:字母数量
    return 0;
}

🎯 练习3:把字符串全部变大写

复制代码
输入:abc
输出:ABC

👉 提示:

复制代码
'a' → 'A' = -32
cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    char str[100] ;  
    cin >> str;
    for (int i = 0; str[i] != '\0'; i++) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            str[i] = str[i] - 32;  // ASCII码小写转大写
        }
    }
    cout << str << endl;  // 输出:转后字符串
    return 0;
}

🌟 总结

✔ char数组 = 字符小火车

✔ 必须有 \0

"Hello" 会自动加 \0

✔ 用 s[i] 访问

✔ 用循环遍历

✔ 输入要注意 cin vs getline


接下来,我们讲解字符数组的核心战斗技能🔥


🌟 第一章:函数工具箱登场!(字符串魔法工厂)

1、🎯 故事:

在字符王国里,有一个"工具工厂"🏭

专门处理字符小火车(char数组):

工具 功能
strlen 数长度
strcpy 复制
strcmp 比大小
strcat 拼接

2、👉 这些工具都在:

复制代码
#include <cstring>

🌟 第二章:strlen(测长度神器)


1、🎯 作用

👉 计算字符串长度(不算 \0


2、🎯 示例

复制代码
#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    char s[] = "Hello";
    cout << strlen(s) << endl;
}

(1)👉 输出:

复制代码
5

(2)🎯 图解

复制代码
[H][e][l][l][o][\0]
 ↑           ↑
 0           4

👉 长度 = 5


3、🌟 手写 strlen

复制代码
int my_strlen(char s[])
{
    int len = 0;
    while(s[len] != '\0')
    {
        len++;
    }
    return len;
}

👉 核心思想:一直走,直到遇到 \0


🌟 第三章:strcpy(复制魔法)


1、🎯 作用

👉 把一个字符串复制到另一个


2、🎯 示例

复制代码
char a[20];
char b[] = "Hello";

strcpy(a, b);

cout << a << endl;

👉 输出:

复制代码
Hello

3、❗注意

👉 a 必须足够大!!


4、🌟 手写 strcpy

复制代码
void my_strcpy(char a[], char b[])
{
    int i = 0;
    while(b[i] != '\0')
    {
        a[i] = b[i];
        i++;
    }
    a[i] = '\0'; // 别忘了!!
}

🌟 第四章:strcmp(比较大小)


1、🎯 作用

👉 比较两个字符串


2、🎯 规则(非常重要)

复制代码
a < b → 负数
a = b → 0
a > b → 正数

👉 按 ASCII 比较!


3、🎯 示例

复制代码
strcmp("abc", "abd")  // < 0
strcmp("abc", "abc")  // = 0
strcmp("abd", "abc")  // > 0

4、🌟 手写 strcmp

复制代码
int my_strcmp(char a[], char b[])
{
    int i = 0;
    while(a[i] != '\0' && b[i] != '\0')
    {
        if(a[i] != b[i])
        {
            return a[i] - b[i];
        }
        i++;
    }
    return a[i] - b[i];
}

🌟 第五章:strcat(拼接魔法)


1、🎯 作用

👉 把 b 接到 a 后面


2、🎯 示例

复制代码
char a[20] = "Hello";
char b[] = "World";

strcat(a, b);

cout << a << endl;

👉 输出:

复制代码
HelloWorld

3、🌟 图解

复制代码
a: [H][e][l][l][o][\0][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
b: [W][o][r][l][d][\0]

👉 拼接后:

复制代码
[H][e][l][l][o][W][o][r][l][d][\0][ ][ ][ ][ ][ ][ ][ ][ ][ ]

4、🌟 手写 strcat

复制代码
void my_strcat(char a[], char b[])
{
    int i = 0;
    while(a[i] != '\0') i++;

    int j = 0;
    while(b[j] != '\0')
    {
        a[i] = b[j];
        i++;
        j++;
    }

    a[i] = '\0';
}

🌟 第六章:字符串算法基础(竞赛必备🔥)


🎯 1:字符串翻转(Reverse)


(1)🌟 示例

复制代码
输入:Hello
输出:olleH

(2)🌟 思想(双指针)

复制代码
头 ←→ 尾 交换

(3)🌟 代码

复制代码
void reverse(char s[])
{
    int len = strlen(s);

    for(int i = 0; i < len/2; i++)
    {
        char t = s[i];
        s[i] = s[len-1-i];
        s[len-1-i] = t;
    }
}

🎯 2:判断回文(Palindrome)


(1)🌟 什么是回文?

复制代码
aba ✔
abba ✔
abc ✘

(2)🌟 思想

👉 左右对比


(3)🌟 代码

复制代码
bool is_palindrome(char s[])
{
    int len = strlen(s);

    for(int i = 0; i < len/2; i++)
    {
        if(s[i] != s[len-1-i])
            return false;
    }

    return true;
}

🌟 第七章:综合闯关题(实战🔥)


🎯 题1:复制并拼接

复制代码
输入:
abc
def

输出:
abcdef

🎯 题2:比较字典序

复制代码
输入:
apple
banana

输出:
apple < banana

🎯 题3:翻转 + 判断回文

复制代码
输入:
level

输出:
回文

🎯 题4:统计字符串长度(手写版)

👉 不用 strlen


🌟 最终总结(这一节掌握🔥)


✔ strlen → 数长度

✔ strcpy → 复制

✔ strcmp → 比较

✔ strcat → 拼接

✔ 会手写实现(超级重要)

✔ 掌握:

  • 翻转

  • 回文判断


相关推荐
深邃-2 小时前
数据结构-队列
c语言·数据结构·c++·算法·html5
Rhystt2 小时前
代码随想录算法训练营第六十天|多余的边?从基础到进阶!
开发语言·c++·算法·图论
羊小猪~~2 小时前
【QT】-- QMainWindow简介
开发语言·数据库·c++·后端·qt·前端框架·求职招聘
2301_810160952 小时前
C++中的策略模式进阶
开发语言·c++·算法
-Rane2 小时前
【C++】map和set
开发语言·c++
keep intensify2 小时前
单源最短路径
数据结构·c++·算法
2401_873544922 小时前
分布式缓存一致性
开发语言·c++·算法
njidf3 小时前
C++中的观察者模式
开发语言·c++·算法
IAUTOMOBILE3 小时前
C++ 入门基础:开启编程新世界的大门
java·jvm·c++