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