C++ 竞赛入门

index

字符数组与字符串

本节学会什么

  • 区分单个字符 char 与一段文本
  • 了解 C 风格字符串和 std::string 的用途
  • 为不同输入格式选择合适的读取方式

为什么需要它

题目的输入不总是数字。姓名、单词、括号序列、地图的一行字符都属于文本。文本由一个个字符组成,但“保存一段文本”和“保存一个字符”需要不同的数据类型和操作。

最小可运行示例

#include <iostream>
#include <string>

int main() {
    char initial = 'C';
    std::string name = "CppBook";

    std::cout << initial << '\n';
    std::cout << name << '\n';
    return 0;
}

'C' 使用单引号,表示一个 char"CppBook" 使用双引号,表示一段字符。初学竞赛代码默认优先使用 std::string,只有题目或旧接口明确要求时才使用 C 风格字符串。

关键过程与易错点

  • 一个 char 可以和整数运算,例如小写字母转大写常用 ch - 'a' + 'A',但前提是它确实在小写字母范围内。
  • std::cin >> word 读取一个不含空格的单词;含空格的一整行要使用 std::getline,下一节会说明细节。
  • C 风格字符串本质是 char 数组,并以特殊字符 \0 结尾。它需要手动考虑容量。
  • std::string 自己保存长度,可以直接赋值、拼接和比较,适合本书后续大多数题目。

动手检查

定义 char first = 'A';,输出 first + 1char(first + 1),比较整数和字符的输出差异。

再定义一个 std::string 保存你的名字,输出它和一个空格后的 C++ learner。注意双引号和单引号不能混用。

立即练习

难度 题目 题解 训练目标
基础 洛谷 P5704:字母转换 题解 读入一个字符,并利用字符编码关系完成转换。
巩固 洛谷 P5732:杨辉三角 题解 复习按行输出;把“字符序列”和“数值序列”区分开。