- C++
字符串处理学习笔记教程
- 2025-7-29 20:24:28 @
字符串处理学习笔记教程
一、前言
恭喜你开启字符串处理学习之旅!字符串操作在编程里超实用,像统计字符、大小写转换、判断相等,都是常见又重要的任务。接下来咱们结合 OpenJudge 题目,一步步掌握这些技能,代码都有详细注释,别怕看不懂,跟着学就好,你肯定能学会!
二、知识模块与实践
(一)统计数字字符个数(题目01)
题目需求:输入一行字符,数出其中数字字符(0 - 9 )的个数。
核心思路:逐个遍历字符,判断是否在 '0'
到 '9'
范围,是就计数。
#include<iostream>
#include<string>
using namespace std;
int main() {
string str;
int cnt = 0; // 用来存数字字符个数,初始化为0
getline(cin, str); // 读入一行字符串,包含空格也能读
int len = str.size(); // 获取字符串长度
for (int i = 0; i < len; i++) {
// 判断字符是否是数字,'0'到'9'是数字字符的ASCII范围
if (str[i] >= '0' && str[i] <= '9') {
cnt += 1; // 是数字就计数加1
}
}
cout << cnt; // 输出数字字符总数
return 0;
}
学习要点:getline
读整行、str.size()
取长度、字符范围判断,这些基础操作得记牢,往后处理字符串经常用!
(二)小写字母转大写字母(题目13)
题目需求:把字符串里所有小写字母转成大写。
核心思路:遍历字符,若为小写('a'
- 'z'
),利用 ASCII 码差值转大写(大写比对应小写小 32 ,也可用 'a' - 'A'
算差值 )。
#include<iostream>
using namespace std;
int main() {
string s;
getline(cin, s); // 读入带空格的字符串
int len = s.size();
for (int i = 0; i < len; i++) {
// 判断是否是小写字母
if (s[i] >= 'a' && s[i] <= 'z') {
// 小写转大写,'a'-'A' 是 32,减去它就转成大写
s[i] = s[i] - ('a' - 'A');
}
}
cout << s << endl; // 输出转换后的字符串
return 0;
}
学习要点:字符本质是 ASCII 码,通过算术运算能转换大小写,记住 'a' - 'A'
这个差值,处理字母大小写超方便!
(三)字符串判等(题目17,忽略大小写和空格)
题目需求:判断两个字符串,忽略大小写和空格后是否相等,相等输出 YES
,否则 NO
。
核心思路:先统一处理两个字符串(转小写/大写、去掉空格 ),再比较处理后的内容。
#include<iostream>
#include <algorithm>
using namespace std;
int main() {
string s1, s2;
getline(cin, s1);
getline(cin, s2);
// 处理 s1:大写转小写(和 s2 统一处理方式)
for (int i = 0; i < (int)s1.size(); i++) {
if (s1[i] >= 'A' && s1[i] <= 'Z') {
// 大写转小写,加上 'a'-'A'(32)
s1[i] = s1[i] + ('a' - 'A');
}
}
// 处理 s2:用 transform 函数转小写,更简洁(也能遍历转,选顺手的方式)
transform(s2.begin(), s2.end(), s2.begin(), ::tolower);
// 去掉 s1、s2 的空格,存到新字符串
string s11 = "", s22 = "";
for (int i = 0; i < (int)s1.size(); i++) {
if (s1[i] != ' ') { // 不是空格就拼接到 s11
s11 += s1[i];
}
}
for (int i = 0; i < (int)s2.size(); i++) {
if (s2[i] != ' ') { // 不是空格就拼接到 s22
s22 += s2[i];
}
}
// 比较处理后的字符串
if (s11 == s22) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}
学习要点:处理字符串判等,要先统一规则(大小写、空格 )。transform
是好用的工具函数,能简化大小写转换;拼接字符串去空格,思路简单又实用,多练就能灵活用!
(四)找第一个只出现一次的字符(题目02)
题目需求:给定小写字母字符串,找第一个仅出现一次的字符,没有就输出 no
。
核心思路:用数组(或哈希表 )统计每个字符出现次数,再遍历找第一个次数为 1 的字符。
#include<iostream>
using namespace std;
int tong[200]; // 存字符出现次数,ASCII 范围够存小写字母
int main() {
string str;
cin >> str;
// 统计每个字符出现次数
for (int i = 0; i < str.size(); i++) {
// 字符作为数组下标,次数加1
tong[str[i]]++;
}
// 找第一个出现一次的字符
for (int i = 0; i < str.size(); i++) {
if (tong[str[i]] == 1) { // 次数是1,就是目标
cout << str[i];
return 0; // 找到就直接返回,保证是第一个
}
}
cout << "no"; // 没找到输出 no
return 0;
}
学习要点:统计字符频次,数组或哈希表是常用方法。这里用数组,利用字符 ASCII 码当下标,简单高效。遍历找结果时,一旦找到就返回,确保是“第一个”符合条件的,逻辑要清晰!
三、总结与激励
咱们学了字符串的遍历、字符判断、大小写转换、频次统计、复杂判等,这些都是编程基础,也是解决实际问题的“小武器”!
学习路上,遇到报错别慌,这是进步的信号;代码逻辑绕,多调试、多拆解,慢慢就清晰啦。每掌握一个小功能,都是在给自己的编程“武器库”添砖加瓦!
坚持呀!现在敲的每行代码,都是在锻炼逻辑思维,未来遇到更复杂的问题,你会发现这些基础超有用。继续加油,你会越来越厉害,用代码创造更多精彩~ 不管是解决算法题,还是写项目里的字符串处理逻辑,这些知识都能帮到你,冲就完事!