



🎯 第三部分 编程题第一题:《字母求和》
一、🏰 故事开始:神秘密码森林
小杨同学发明了一种神奇密码!
在森林里,每个字母都代表一个数字:
1、🌱 小写字母(好精灵)
小写字母代表它在字母表中的位置:
a = 1
b = 2
c = 3
...
z = 26
2、🌋 大写字母(火焰精灵)
大写字母代表它自己的 ASCII 编码的负数:
'A' = -65
'B' = -66
'C' = -67
3、🎯 任务
给你一个字符串,求所有字母代表数字的总和!
4、🌰 例子
输入:
3
aAc
意思是:
字符串长度是3,内容是:
a A c
5、分别计算:
🌱 a
a =1
🌋 A
ASCII:
A =65
所以:
A = -65
🌱 c
c =3
总和:
1 + (-65) + 3 = -61
6、✅ 输出
-61
二、🧠 解题思路
我们要一个一个检查字符串里的字母。
1、就像机器人巡逻队:
🚶 第一步:读取输入
int n;
string s;
cin >> n >> s;
🚶 第二步:准备答案盒子
int sum = 0;
🚶 第三步:逐个检查字母
for(int i=0;i<n;i++)
2、🔍 判断字母类型
(1)🌱 如果是小写字母
if(s[i]>='a' && s[i]<='z')
(2)怎么算位置?
s[i]-'a'+1
(3)为什么?
例如:
'c'-'a'+1
=99-97+1
=3
3、🌋 如果是大写字母
else
(加上负值)等于直接减去它的 ASCII 值:
sum -= s[i];
三、🎁 参考程序
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
string s;
cin >> n;
cin >> s;
int sum = 0;
for(int i = 0; i < n; i++)
{
if(s[i] >= 'a' && s[i] <= 'z')
{
sum += s[i] - 'a' + 1;
}
else if(s[i] >= 'A' && s[i] <= 'Z')
{
sum -= s[i];
}
}
cout << sum << endl;
return 0;
}
四、🎮 程序运行演示
输入:
4
abCZ
计算过程:
a =1
b =2
C =-67
Z =-90
总和:
1+2-67-90=-154
输出:
-154
五、本题用到的知识
1、✅ 字符判断
'a'~'z'
'A'~'Z'
2、✅ ASCII编码
字符本质上是数字!
'A' =65
3、✅ for循环遍历字符串
for(...)
4、✅ 累加思想
一个一个加进 sum。
🌟 更快速的写法(进阶)
大写小写直接使用函数判断:
if(islower(s[i])) ...
if(isupper(s[i])) ...
🎉 总结
本题就是要:
👉 遍历字符串
👉 判断大小写
👉 转成数字
👉 累加输出