C++字符数组(字符串基础)

6 阅读6分钟

C++字符数组(字符串基础)

1 什么是字符串

字符串就是 很多字符组成的一段文字

例如:

Hello
I love C++
2026

字符串里的每一个字母、数字、符号、空格 都是一个字符


2 用字符数组存字符串

在C++中可以用 char数组 存储字符串。

char s[100];

意思是:

创建一个可以存 100个字符 的数组。

例如输入:

I love C++ 2026

数组中实际存储:

I  空格  l  o  v  e  空格  C  +  +  空格  2  0  2  6

每个字符占 一个位置


3 读取一整行字符串

如果字符串中 有空格,不能用 cin,要用:

cin.getline(s,100);

作用:

读取 一整行字符串(包括空格)


4 字符串结束标志

每个字符串最后都会有一个 结束符

'\0'

表示 字符串到这里结束了

所以遍历字符串常写:

for(int i=0;s[i]!='\0';i++)

意思:

只要 没有遇到结束符,就继续往后检查


5 遍历字符串(核心模板)

最常用代码:

for(int i=0;s[i]!='\0';i++)
{
    //处理 s[i]
}

作用:

一个一个字符检查字符串。


6 判断数字字符

数字字符范围:

'0''9'

判断方法:

if(s[i]>='0' && s[i]<='9')

如果条件成立,说明这个字符是 数字

例如:

I love C++ 2026

数字是:

2 0 2 6

4个


7 统计字符数量(常见方法)

定义计数变量:

int cnt=0;

如果满足条件:

cnt++;

循环结束后:

cout<<cnt;

今天的核心知识(一定要记住)

1️⃣ 字符串可以用 char数组存储

2️⃣ 读取带空格字符串要用

cin.getline()

3️⃣ 字符串结尾是

'\0'

4️⃣ 遍历字符串模板

for(int i=0;s[i]!='\0';i++)

5️⃣ 判断数字

'0' <= 字符 <= '9'

如果是 信息学竞赛入门班,我其实非常建议你让学生 再记一个非常重要的知识点(很多老师都会漏讲,但以后做题非常重要):

字符其实是可以比较大小的。

比如:

'A' - 'Z'
'a' - 'z'
'0' - '9'

重点题目练习

C++字符数组入门必会10题

第1题 统计字符数量

题目

输入一行字符串(可能包含空格),
输出 非空格字符的数量

示例

输入

I love C++

输出

7

第2题 统计数字个数

题目

输入一行字符串,统计其中 数字字符的个数

示例

输入

abc123d45

输出

5

提示:数字范围

'0''9'

第3题 统计字母个数

题目

输入一行字符串,统计 英文字母的个数

字母范围:

'A''Z'
'a''z'

示例

输入

Hello 2026

输出

5

第4题 统计大写字母数量

题目

输入一行字符串,统计 大写字母数量

大写字母范围:

'A''Z'

示例

输入

Hello WORLD

输出

6

第5题 统计小写字母数量

题目

输入一行字符串,统计 小写字母数量

小写字母范围

'a''z'

第6题 把小写字母变成大写

题目

输入一行字符串,
把其中 所有小写字母变成大写字母

提示:

'a' - 'A' = 32

示例

输入

hello world

输出

HELLO WORLD

第7题 把大写字母变成小写

输入一行字符串,
所有大写字母变成小写字母

示例

输入

HELLO

输出

hello

第8题 统计空格数量

题目

输入一行字符串,统计 空格的数量

示例

输入

I love C++

输出

2

第9题 统计单词数量(经典题)

题目

输入一行英语句子,统计 单词数量

规则:

单词之间用 空格分隔

示例

输入

I love C++

输出

3

提示思路:

当出现

空格 -> 字母

说明一个新单词开始。


第10题 反向输出字符串

题目

输入一个字符串,
倒着输出

示例

输入

hello

输出

olleh

字符串遍历万能模板(一定记住)

for(int i=0;s[i]!='\0';i++)
{
    //处理 s[i]
}

字符判断总结(必须会)

数字

'0' <= s[i] <= '9'

大写字母

'A' <= s[i] <= 'Z'

小写字母

'a' <= s[i] <= 'z'

C++字符串入门经典5题

第1题 统计不同字符类型

题目

输入一行字符串,统计:

  • 大写字母数量
  • 小写字母数量
  • 数字数量
  • 空格数量

示例

输入

Hello 2026 C++

输出

大写字母:2
小写字母:3
数字:4
空格:2

提示

'A' <= s[i] <= 'Z'
'a' <= s[i] <= 'z'
'0' <= s[i] <= '9'
s[i] == ' '

第2题 找出字符串中最大的数字

题目

输入一行字符串,其中包含数字字符。
输出 最大的数字字符

示例

输入

abc3591

输出

9

思路

遍历字符串,如果是数字就更新最大值。


第3题 删除字符串中的空格

题目

输入一行字符串,
输出 删除所有空格后的字符串

示例

输入

I love C++

输出

IloveC++

第4题 判断回文字符串(经典题)

题目

输入一个字符串,判断是否是 回文字符串

回文:正着读和倒着读一样。

示例

输入

level

输出

YES

输入

hello

输出

NO

提示思路

比较:

s[0] 和 s[n-1]
s[1] 和 s[n-2]

第5题 统计单词数量(高频题)

题目

输入一行英语句子,统计 单词数量

规则:

  • 单词之间用 空格分隔

示例

输入

I love C++

输出

3

关键思路

当出现:

空格 → 字母

说明 新单词开始

例如:

"I love C++"
  ↑    ↑
两个新单词开始

字符串处理核心模板

所有字符串题基本都用这个:

for(int i=0;s[i]!='\0';i++)
{
    //处理字符
}

字符判断口诀(学生很好记)

数字:

0~9

大写字母:

A~Z

小写字母:

a~z

空格:

' '

C++字符串最容易出错的3个知识点

1 cin 不能读取带空格的字符串

如果使用:

cin >> s;

输入:

I love C++

实际只会读到:

I

后面的内容不会读取。

正确方法

如果字符串中 有空格,要使用:

cin.getline(s,100);

作用:

读取 一整行字符串(包括空格)


2 字符串的结束符 '\0'

在C++中,字符串最后都会自动加上:

'\0'

表示 字符串结束

例如输入:

hello

实际存储:

h e l l o \0

所以遍历字符串通常写:

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

意思:

只要没遇到结束符,就继续遍历。


3 字符和字符串不一样

很多同学会混淆。

字符(一个)

单引号

'a'
'5'
' '

类型是:

char

字符串(多个字符)

双引号

"hello"
"2026"

类型是:

字符串

学生最常见错误

错误写法:

if(s[i]=="a")

正确写法:

if(s[i]=='a')

原因:

s[i]字符,所以要用 单引号


字符串遍历万能模板(必须背)

for(int i=0;s[i]!='\0';i++)
{
    //处理 s[i]
}

字符判断总结

数字:

'0' <= s[i] <= '9'

大写字母:

'A' <= s[i] <= 'Z'

小写字母:

'a' <= s[i] <= 'z'

一句话总结

字符串就是字符数组,做题就是一个一个字符去判断。


如果是 你现在这个C++班的进度(刚学完数组) ,我其实强烈建议你 下一节课马上讲一个东西,学生字符串能力会直接提升一大截,而且是 NOIP / GESP 高频内容

这个知识点是:

ASCII码与字符运算

比如:

'a' - 'A' = 32

所以:

小写字母 → 大写字母
s[i] = s[i] - 32