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 时,程序输出 11hgetline 读取到换行符为止,并把空格保留在字符串里;line[0] 是第一个字符。

关键过程与易错点

  • std::cin >> word 读一个单词,std::getline(std::cin, line) 读一整行。前面若刚用过 cin >>,残留的换行会被 getline 立刻读走,可先写 std::getline(std::cin >> std::ws, line)
  • text.size() 是长度,合法下标从 0text.size() - 1。空字符串没有 text[0],先用 empty() 判断。
  • 字符串可以用 + 拼接,可以用 == 比较内容:first + " " + lastword == "yes"
  • 逐字符处理时,循环条件写成 i < text.size();不要写 i <= text.size(),最后一次会越界。
  • 题目只需要一个单词时,不要为了使用 getline 增加额外复杂度。

动手检查

读入一整行,逐个输出其中的字符,每个字符后加一个空格。然后统计其中有多少个字符是 'a'

先用 cin >> word 输入 hello world,观察只读到什么;再改用 getline,解释两种输入方式的差别。

立即练习

难度 题目 题解 训练目标
基础 洛谷 P5734:文字处理软件 题解 练习 string 的长度、拼接、替换和逐字符访问。
巩固 洛谷 P1308:统计单词数 题解 使用整行输入处理空格,并完成不区分大小写的匹配。
挑战 洛谷 P1598:垂直柱状图 题解 统计字符频次,并按题目格式输出。