C++ 竞赛入门
CPPString
C++ string
本节学会什么
- 定义、读入和输出
std::string - 用
size()和下标访问字符串 - 用
getline读取含空格的一整行
为什么需要它
std::string 是 C++ 标准库提供的文本类型。它能自动管理长度,支持赋值、拼接和比较,避免了字符数组常见的容量和结束符错误,是竞赛入门阶段处理文本的首选。
最小可运行示例
#include <iostream>
#include <string>
int main() {
std::string line;
std::getline(std::cin, line);
std::cout << line.size() << '\n';
if (!line.empty()) {
std::cout << line[0] << '\n';
}
return 0;
}
输入 hello world 时,程序输出 11 和 h。getline 读取到换行符为止,并把空格保留在字符串里;line[0] 是第一个字符。
关键过程与易错点
std::cin >> word读一个单词,std::getline(std::cin, line)读一整行。前面若刚用过cin >>,残留的换行会被getline立刻读走,可先写std::getline(std::cin >> std::ws, line)。text.size()是长度,合法下标从0到text.size() - 1。空字符串没有text[0],先用empty()判断。- 字符串可以用
+拼接,可以用==比较内容:first + " " + last、word == "yes"。 - 逐字符处理时,循环条件写成
i < text.size();不要写i <= text.size(),最后一次会越界。 - 题目只需要一个单词时,不要为了使用
getline增加额外复杂度。
动手检查
读入一整行,逐个输出其中的字符,每个字符后加一个空格。然后统计其中有多少个字符是 'a'。
先用 cin >> word 输入 hello world,观察只读到什么;再改用 getline,解释两种输入方式的差别。
立即练习
| 难度 | 题目 | 题解 | 训练目标 |
|---|---|---|---|
| 基础 | 洛谷 P5734:文字处理软件 | 题解 | 练习 string 的长度、拼接、替换和逐字符访问。 |
| 巩固 | 洛谷 P1308:统计单词数 | 题解 | 使用整行输入处理空格,并完成不区分大小写的匹配。 |
| 挑战 | 洛谷 P1598:垂直柱状图 | 题解 | 统计字符频次,并按题目格式输出。 |