📚 什么是字符串?
从字符到字符串
之前我们学过char类型只能存储单个字符,而字符串(string)可以存储一串字符。
- ✅ 字符序列:由多个字符组成的序列
- ✅ 可变长度:可以随时增加或减少字符
- ✅ 丰富操作:拼接、查找、替换、截取等
- ✅ 面向对象:string是C++标准库提供的类
💡 形象比喻:
• char就像一颗珍珠,string就像一串项链
• char是一个字母,string是一个单词或句子
• string可以看作是一个特殊的字符数组
string vs char数组
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Hello";
string str2 = "World";
char arr[] = "Hello";
string result = str1 + " " + str2;
if (str1 == "Hello") {
cout << "相等" << endl;
}
cout << "长度:" << str1.length() << endl;
return 0;
}
💡 推荐使用string的原因:
• 更安全,不会越界
• 操作更简单直观
• 功能更强大
• 自动管理内存
string的声明和初始化
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Hello";
string str2("World");
string str3;
string str4(5, '*');
string str5 = str1;
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << endl;
cout << "str3: " << str3 << "(空)" << endl;
cout << "str4: " << str4 << endl;
cout << "str5: " << str5 << endl;
return 0;
}
⚙️ 字符串的基本操作
字符串的输入和输出
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
cout << "请输入姓名:";
cin >> name;
cout << "你好," << name << endl;
string sentence;
cout << "请输入一句话:";
cin.ignore();
getline(cin, sentence);
cout << "你说的是:" << sentence << endl;
return 0;
}
⚠️ 重要区别:
• cin >> str:遇到空格、制表符、换行符就停止
• getline(cin, str):读取整行,直到遇到换行符
• 如果先用了cin,再用getline,需要用cin.ignore()清除缓冲区
字符串的拼接
#include <iostream>
#include <string>
using namespace std;
int main() {
string firstName = "张";
string lastName = "三";
string fullName = firstName + lastName;
cout << "姓名:" << fullName << endl;
string greeting = "你好,";
greeting += fullName;
greeting += "!";
cout << greeting << endl;
int age = 18;
string info = "年龄:" + to_string(age);
cout << info << endl;
return 0;
}
访问字符串中的字符
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello";
cout << "第1个字符:" << str[0] << endl;
cout << "第3个字符:" << str[2] << endl;
cout << "第1个字符:" << str.at(0) << endl;
str[0] = 'h';
cout << "修改后:" << str << endl;
cout << "逐个字符:";
for (int i = 0; i < str.length(); i++) {
cout << str[i] << " ";
}
cout << endl;
return 0;
}
🛠️ 字符串的常用方法
获取字符串长度
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello World";
cout << "长度:" << str.length() << endl;
cout << "大小:" << str.size() << endl;
if (str.empty()) {
cout << "字符串为空" << endl;
} else {
cout << "字符串不为空" << endl;
}
return 0;
}
查找子字符串
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello World, Hello C++";
string target = "Hello";
size_t pos = str.find(target);
if (pos != string::npos) {
cout << "找到\"" << target << "\",位置:" << pos << endl;
} else {
cout << "未找到\"" << target << "\"" << endl;
}
int count = 0;
size_t start = 0;
while ((pos = str.find(target, start)) != string::npos) {
count++;
start = pos + 1;
}
cout << target << " 出现了 " << count << " 次" << endl;
return 0;
}
截取子字符串
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello World";
string sub1 = str.substr(0, 5);
string sub2 = str.substr(6);
cout << "原字符串:" << str << endl;
cout << "子串1:" << sub1 << endl;
cout << "子串2:" << sub2 << endl;
return 0;
}
字符串比较
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "apple";
string str2 = "banana";
string str3 = "apple";
if (str1 == str3) {
cout << "str1 和 str3 相等" << endl;
}
if (str1 < str2) {
cout << "\"" << str1 << "\" 在 \"" << str2 << "\" 前面" << endl;
}
int result = str1.compare(str2);
if (result < 0) {
cout << "str1 < str2" << endl;
} else if (result > 0) {
cout << "str1 > str2" << endl;
} else {
cout << "str1 == str2" << endl;
}
return 0;
}
字符串转换
#include <iostream>
#include <string>
using namespace std;
int main() {
int num = 123;
string str = to_string(num);
cout << "数字转字符串:" << str << endl;
string strNum = "456";
int num2 = stoi(strNum);
cout << "字符串转数字:" << num2 << endl;
double num3 = stod("3.14");
cout << "字符串转浮点数:" << num3 << endl;
return 0;
}
🎯 字符串工具集
选择要执行的字符串操作
输入字符串后选择操作...
🚀 字符串的高级应用
实际应用:简单的文本处理
#include <iostream>
#include <string>
using namespace std;
int main() {
string text = " Hello World C++ ";
cout << "原文本:\"" << text << "\"" << endl;
cout << "长度:" << text.length() << endl;
int wordCount = 0;
bool inWord = false;
for (int i = 0; i < text.length(); i++) {
if (text[i] != ' ' && !inWord) {
wordCount++;
inWord = true;
} else if (text[i] == ' ') {
inWord = false;
}
}
cout << "单词数:" << wordCount << endl;
return 0;
}
字符串的实际应用场景
字符串在实际编程中有广泛应用:
- 📝 用户输入处理:姓名、地址、评论等
- 🔍 搜索功能:查找关键词、过滤内容
- 🌐 网络编程:URL、HTTP请求、JSON数据
- 📄 文件处理:读取文本文件、日志分析
- 🔐 密码验证:检查密码强度、加密解密
- 📊 数据解析:CSV文件、配置文件
常见错误和注意事项
string str = "Hello";
#include <string>
string str = "Hello";
cin >> name;
getline(cin, sentence);
cin >> name;
cin.ignore();
getline(cin, sentence);
string str = "Hi";
cout << str[5] << endl;
if (5 < str.length()) {
cout << str[5] << endl;
}
📝 实战练习
📝 理解测试
以下代码的输出是什么?
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello";
str += " ";
str += "World";
cout << str.length() << endl;
return 0;
}
选择答案查看解析...
💻 综合挑战
题目:创建一个程序,实现一个简单的回文检测器。回文是指正读和反读都一样的字符串,如"aba"、"madam"。
输入字符串后点击"生成代码"...