CSP-J/S冲奖第5天:C++字符串
- 其他
- 2025-09-12 01:00:01

一、什么是字符串?
定义:字符串是由字符组成的序列,用于存储和操作文本数据。
类比:就像现实生活中的句子或单词,字符串是由一个个字母(字符)组成的。
特点:字符串可以包含字母、数字、符号等。
在 C++ 中,有两种主要的字符串表示方式:C 风格字符串:以字符数组的形式存储,以空字符 \0 结尾。
std::string 类型:C++ 标准库提供的字符串类型,功能更强大且易于使用。
二、C 风格字符串 1. 定义与初始化
定义:C 风格字符串是一个字符数组,以空字符 \0 结尾。
语法: char 字符串名[大小]; 初始化: char greeting[] = "Hello"; // 自动添加末尾的 '\0' char name[10] = {'J', 'o', 'h', 'n', '\0'}; // 手动添加 '\0'1V1+:malaoshi606
2. 示例 #include <iostream> using namespace std; int main() { char greeting[] = "Hello, World!"; cout << greeting << endl; // 输出字符串 return 0; }运行结果:
Hello, World!3. 常见问题
固定大小:C 风格字符串的大小在定义时固定,无法动态扩展。
越界风险:如果忘记添加 \0 或超出数组范围,可能导致未定义行为。
操作复杂:需要手动处理字符串拼接、比较等操作。
三、std::string 类型 1. 定义与初始化
定义:std::string 是 C++ 标准库提供的字符串类型,位于 <string> 头文件中。
语法: string 字符串名; 初始化: string greeting = "Hello, World!"; string empty; // 空字符串 string copy = greeting; // 拷贝另一个字符串 2. 示例 #include <iostream> #include <string> // 包含 string 头文件 using namespace std; int main() { string greeting = "Hello, World!"; cout << greeting << endl; // 输出字符串 return 0; }运行结果:
Hello, World!3. 常见操作 (1) 输入与输出 使用 cin 和 getline 读取字符串: string name; cout << "请输入你的名字:"; cin >> name; // 只能读取一个单词(遇到空格停止) cout << "你好," << name << endl; string sentence; cout << "请输入一句话:"; getline(cin, sentence); // 读取整行输入(包括空格) cout << "你输入的是:" << sentence << endl; (2) 拼接字符串 使用 + 运算符连接两个字符串: string first = "Hello, "; string second = "World!"; string result = first + second; cout << result << endl; // 输出 "Hello, World!" (3) 获取长度 使用 .size() 或 .length() 方法获取字符串的长度: string text = "C++ is fun!"; cout << "字符串长度:" << text.size() << endl; // 输出 11 (4) 访问字符 使用索引访问字符串中的单个字符(从 0 开始): string text = "Hello"; cout << "第一个字符:" << text[0] << endl; // 输出 'H' cout << "最后一个字符:" << text[text.size() - 1] << endl; // 输出 'o' (5) 比较字符串 使用 ==、!=、<、> 等运算符比较字符串: string a = "apple"; string b = "banana"; if (a < b) { cout << a << " 在字典序上小于 " << b << endl; } (6) 查找子字符串 使用 .find() 方法查找子字符串的位置: string text = "Hello, World!"; size_t pos = text.find("World"); // 返回子字符串的起始位置 if (pos != string::npos) { // 如果找到 cout << "子字符串 'World' 的位置:" << pos << endl; // 输出 7 } else { cout << "未找到子字符串" << endl; }
四、综合练习 练习 1:统计字符数量
编写一个程序,输入一个字符串,统计其中字母、数字和其他字符的数量。
参考代码:
#include <iostream> #include <string> using namespace std; int main() { string text; cout << "请输入一个字符串:"; getline(cin, text); int letters = 0, digits = 0, others = 0; for (char c : text) { // 遍历字符串中的每个字符 if (isalpha(c)) { // 判断是否为字母 letters++; } else if (isdigit(c)) { // 判断是否为数字 digits++; } else { // 其他字符 others++; } } cout << "字母数量:" << letters << endl; cout << "数字数量:" << digits << endl; cout << "其他字符数量:" << others << endl; return 0; }练习 2:反转字符串
编写一个程序,输入一个字符串,将其反转并输出。
参考代码:
#include <iostream> #include <string> using namespace std; int main() { string text; cout << "请输入一个字符串:"; getline(cin, text); string reversed = ""; for (int i = text.size() - 1; i >= 0; i--) { reversed += text[i]; // 从后往前拼接字符 } cout << "反转后的字符串:" << reversed << endl; return 0; }练习 3:判断回文字符串
编写一个程序,输入一个字符串,判断它是否是回文字符串(正着读和反着读相同)。
参考代码:
#include <iostream> #include <string> using namespace std; int main() { string text; cout << "请输入一个字符串:"; getline(cin, text); bool isPalindrome = true; int n = text.size(); for (int i = 0; i < n / 2; i++) { if (text[i] != text[n - i - 1]) { // 比较首尾字符 isPalindrome = false; break; } } if (isPalindrome) { cout << "这是一个回文字符串" << endl; } else { cout << "这不是一个回文字符串" << endl; } return 0; }五、注意事项
C 风格字符串的风险:
必须确保以 \0 结尾,否则可能导致未定义行为。
不支持直接拼接、比较等操作,需使用标准库函数(如 strcmp、strcat 等)。
std::string 的优势:
动态扩展,无需担心大小限制。
提供丰富的内置方法,简化字符串操作。
输入方式的选择:
cin:只能读取一个单词(遇到空格停止)。
getline:可以读取整行输入(包括空格)。
六、总结
字符串是存储和操作文本数据的重要工具。
C++ 提供了两种字符串表示方式:C 风格字符串 和 std::string 类型。
std::string 更加灵活和易用,推荐初学者优先使用。
常见的操作包括拼接、比较、查找、反转等。
注意避免数组越界和未初始化的问题。
CSP-J/S冲奖第5天:C++字符串由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“CSP-J/S冲奖第5天:C++字符串”