字符串在C++中的基本表示
在写C++程序时,处理文本几乎是每个项目都会遇到的任务。比如你正在做一个学生成绩管理系统,需要存储学生姓名;或者开发一个小型聊天工具,得接收和发送消息。这些场景里,字符串就是最基础的数据类型之一。
C++里有两种常见的字符串表示方式:一种是来自C语言的字符数组,另一种是C++标准库提供的 string 类。前者用起来稍显麻烦,后者更方便安全。
使用字符数组处理字符串
字符数组是以 char 类型为基础的数组,通常以 \0 结尾。比如定义一个名字变量:
char name[20] = "张三";这种方式看似简单,但容易出问题。如果输入的名字太长,超出数组长度,就会造成缓冲区溢出——这不仅是bug来源,还可能被攻击者利用。
操作这类字符串需要调用 <cstring> 头文件里的函数,例如 strcpy、strcat、strlen 等。
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[50] = "Hello, ";
char str2[] = "world!";
strcat(str1, str2); // 拼接字符串
cout << str1 << endl; // 输出: Hello, world!
return 0;
}用string类简化操作
现代C++编程中,推荐使用 string 类。它封装了所有常见操作,不用担心内存越界,语法也更自然。
要使用 string,需包含头文件 <string>:
#include <iostream>
#include <string>
using namespace std;
int main() {
string greeting = "你好";
string name = "小明";
string message = greeting + " " + name + "!";
cout << message << endl; // 输出: 你好 小明!
cout << "长度为:" << message.length() << endl;
return 0;
}你看,拼接用 + 号就行,求长度直接调 length() 方法,读起来像日常说话一样顺畅。
常用操作举例
实际编程中,经常要做查找、替换、分割这些事。比如你想检查用户输入的邮箱是否包含 @ 符号:
string email = "user@example.com";
if (email.find("@") != string::npos) {
cout << "这是一个有效的邮箱格式" << endl;
}find 函数返回子串的位置,如果没找到就返回 string::npos。
再比如提取文件名中的扩展名:
string filename = "document.pdf";
int pos = filename.rfind('.'); // 从右边找最后一个点
if (pos != -1) {
string ext = filename.substr(pos + 1);
cout << "扩展名为:" << ext << endl; // 输出: pdf
}与用户交互时的注意事项
用 cin 直接读取字符串会遇到空格截断的问题。比如输入“北京 欢迎你”,cin 只拿到“北京”。
这时候应该用 getline:
string input;
cout << "请输入一句话:";
getline(cin, input);
cout << "你说的是:" << input << endl;这样整行内容都能完整读进来,适合处理带空格的句子。
字符串处理虽小,却是编程的基本功。掌握好这些方法,写起程序来会顺手很多。