
C-风格字符串
字符串以空字符(ASCII码为0)结尾。 空字符用于标记字符串的结尾。 空字符不占实际存储空间,但会影响字符串长度。 使用
使用
发布日期:2021-05-07 00:55:19
浏览次数:27
分类:精选文章
本文共 3505 字,大约阅读时间需要 11 分钟。
C-风格字符串
字符串是存储在内存的连续字节中的一系列字符。C++处理字符串的方式有两种:一种是来自C语言的C-风格字符串,另一种是基于string
类库的方法。本文将介绍C-风格字符串。
C-风格字符串的特点
C-风格字符串的特点在于:
示例
char dog[8] = {'b','e','a','u','x',' ','I','I'}; //不是字符串char cat[8] = {'f','a','t','e','s','s','a','\0'}; //是字符串
dog
数组不是字符串,因为没有空字符结尾。cat
数组是字符串,因为最后有空字符。
C++有许多处理字符串的函数,包括cout
使用的那些函数,它们都会逐个处理字符串中的字符,直到遇到空字符为止。
初始化字符串常量
初始化字符数组为字符串的方法有两种:
使用单引号括起的字符串:char cat[8] = "fattss a\0";
- 需要手动添加空字符。
- 存在风险,容易遗漏空字符。
使用双引号括起的字符串:char cat[8] = "fattss a";
- 结尾自动包含空字符。
- 编译器会自动计算数组的大小。
示例
char bird[11] = "Mr. Cheeps"; // 结尾自动包含\0char fish[] = "Bubbles"; // 编译器自动计算数组大小
- 使用双引号的字符串隐式包含空字符,编译器会自动截断字符串到空字符处。
- 确保数组大小足够容纳字符串,包括空字符。
字符串拼接
C++允许使用双引号括起的字符串拼接。两个由空白(空格、tab和换行符)分隔的字符串常量会自动拼接为一个字符串。
示例
cout << "I'd give my right arm to be" " a great violinist.\n";// 等效于cout << "I'd give my right arm to be a great violinist.\n";
注意事项
- 拼接时不会在被连接的字符串之间添加空格。
- 第二个字符串的第一个字符会紧跟在第一个字符串的最后一个字符(不考虑空字符)后面。
- 第一个字符串中的空字符会被第二个字符串的第一个字符取代。
在数组中使用字符串
示例程序
#include#include int main() { using namespace std; const int Size = 15; char name1[Size]; // 空数组 char name2[Size] = "C++owboy"; // 初始化数组 cout << "Howdy! I'm " << name2 << "! What's your name?\n"; cin >> name1; cout << "Well, " << name1 << ", your name has " << strlen(name1) << " letters and is stored\n"; cout << "in an array of " << sizeof(name1) << " bytes.\n"; cout << "Your initial is " << name1[0] << ".\n"; name2[3] = '\0'; // 设置空字符 cout << "Here are the first 3 characters of my name: "; cout << name2 << endl; cin.get(); cin.get(); return 0;}
输出结果
sizeof()
返回数组的总字节数:15字节。strlen()
返回字符串的长度,不包括空字符。name2[3] = '\0'
将字符串从第三个字符开始截止。
字符串输入
示例程序
#includeint main() { using namespace std; const int ArSize = 20; char name[ArSize]; char dessert[ArSize]; cout << "Enter your name:\n"; cin >> name; cout << "Enter your favorite dessert:\n"; cin >> dessert; cout << "I have some delicious " << dessert << " for you, " << name << ".\n"; cin.get(); cin.get(); return 0;}
输入结果
- cin读取字符串时,使用空白字符(空格、tab和换行符)来确定字符串的结束位置。
- cin会自动在字符串结尾添加空字符。
解决方法
在读取字符串之前,先丢弃换行符:
cin >> year; cin.get(); // 或者 cin.get(ch);
每次读取一行字符串输入
使用 getline()
cout << "Enter your name:\n";cin.getline(name, ArSize);
getline()
读取指定数目的字符或遇到换行符。- 如果字符串超过指定长度,余下的字符会被丢弃。
使用 get()
cout << "Enter your name:\n";cin.get(name, ArSize).get();
get()
读取字符,直到遇到换行符或达到指定长度。- 换行符会被保留在输入队列中。
示例程序
#includeint main() { using namespace std; const int ArSize = 20; char name[ArSize]; char dessert[ArSize]; cout << "Enter your name:\n"; cin.getline(name, ArSize); cout << "Enter your favorite dessert:\n"; cin.getline(dessert, ArSize); cout << "I have some delicious " << dessert << " for you, " << name << ".\n"; cin.get(); cin.get(); return 0;}
混合输入字符串和数字
示例程序
#includeint main() { using namespace std; cout << "What year was your house built?\n"; int year; cin >> year; cout << "What is its street address?\n"; char address[80]; cin.getline(address, 80); cout << "Year built: " << year << endl; cout << "Address: " << address << endl; cout << "Done!\n"; cin.get(); cin.get(); return 0;}
问题
- 当读取年份时,回车键生成的换行符会被留在输入队列中。
- 后续读取字符串时会读取换行符,导致字符串为空。
解决方法
在读取年份后,先丢弃换行符:
cin >> year; cin.get();
总结
C-风格字符串是C++中最基础的字符串处理方式,以空字符为结尾。使用双引号括起的字符串常量更为方便,隐式包含空字符。正确处理字符串拼接、数组存储和输入,能够有效避免常见错误。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月24日 14时18分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
openstack安装(九)网络服务的安装--控制节点
2019-03-05
shell编程(六)语言编码规范之(变量)
2019-03-05
vimscript学习笔记(二)预备知识
2019-03-05
Android数据库
2019-03-05
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2019-03-05
STM8 GPIO模式
2019-03-05
23种设计模式一:单例模式
2019-03-05
Qt中的析构函数
2019-03-05
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
C++&&STL
2019-03-05
微信js-sdk使用简述(分享,扫码功能等)
2019-03-05
c++中ifstream及ofstream超详细说明
2019-03-05
web项目配置
2019-03-05
基于单片机简易信号误差分析设计-全套资料
2019-03-05
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2019-03-05
Javascript中String支持使用正则表达式的四种方法
2019-03-05
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2019-03-05