字符数组非常特殊,要牢记。
字符数组既可以用一组由花括号括起来、逗号隔开的字符字面值进行初始化。
例如:char my_char1[3] = {'a', 'b', 'c'};//此时my_char1数组的维数是3。
也可以用一个字符串字面值进行初始化,注意字符串字面值包含一个额外的控制符(null)。
例如:char my_char2[4] = "abc";//此时my_char2数组的维数是4。如果写成3就错误了,忘记最后一个非显示null了。
通过以上可以知道字符串字面值的类型是字符常量的数组,即字符串字面值的类型就是const char类型的数组。
C++从C语言继承下来的一种通用结构是C风格字符串,而字符串字面值就是该类型的实例。实际上,C风格字符串既不能确切的归结为
C语言的类型,也不能归结为C++语言的类型,而是以空字符null结束的字符数组。
例如:
char my_char3[] = {'w', 'o', 'r', 'd'}; //不是C风格字符串,只是一个不含有结束符null的字符数组
char my_char4[] = {'w', 'o', 'r', 'd', '\0'}; //C风格字符串
char my_char5[] = "word"; //C风格字符串
const char *my_cp = "word";
char *my_cp1 = my_char3; //指针my_cp1指向my_char3
char *my_cp2 = my_char4; //指向数组第一个元素的指针
可以用(const)char*类型的指针来操纵C风格字符串。
例如:
const char *cp = "some value";
while (*cp) {
//do something to *cp
++cp;
}
while语句的循环条件是对const char*类型的指针cp进行解引用,直到cp指向结束字符数组的null时循环结束
C语言标准库(string.h)提供很多处理C风格字符串的库函数,要使用这些标准库函数必须包含相应的头文件,cstring是string.h的C++版本
#include <cstring>
strlen(s) 返回 s 的长度,不包括字符串结束符 null
strcmp(s1, s2)
比较两个字符串 s1 和 s2 是否相同。若 s1 与 s2 相等,返回 0;若 s1 大于 s2,返回正数;若 s1 小于 s2,则返回负数
strcat(s1, s2)
将字符串 s2 连接到 s1 后,并返回 s1
strcpy(s1, s2) 将 s2 复制给 s1,并返回 s1
strncat(s1, s2,n) 将 s2 的前 n 个字符连接到 s1 后面,并返回 s1
strncpy(s1, s2, n) 将 s2 的前 n 个字符复制给 s1,并返回 s1
注意:传递给这些标准库函数例程的指针必须具有非零值,并且指向以 null 结束的字符数组中的第一个元素。
如果必须使用 C 风格字符串,则使用标准库函数 strncat 和 strncpy 比 strcat 和 strcpy 函数更安全,使用标准库函数 strncat 和 strncpy
的诀窍在于可以适当地控制复制字符的个数。特别是在复制和串连字符串时,一定要时刻记住算上结束符 null。在定义字符串时要切记预留存放 null字符的空间
最后:
应该尽量使用标准库类型的string,对大部分应用而言,使用标准库类型 string,除了增强安全性外,效率也提高了,因此应该尽量避免使用 C 风格字符串。
------------------------------------------
char name[20] = "chenglong";
cout << name;
//输出的不是字符数组的首地址,而是整个字符数组
char ch = 'z';
cout << &ch;
//输出的不是字符ch的内存地址,而是z字符加上其他东西
------------------------------------------
关于上面的代码,特别的C++为了与C兼容关于字符数组做了特殊处理:
输出字符变量地址的时候,改成输出从这个内存单元开始存放的
一系列字符,到向后遇到第一个'\n'为止。
------------------------------------------
char* name[20];
cin >> name;
------------------------------------------
输入的时候从这个地址开始摆放字符最后再补上'\n'
如果想得到字符变量的地址可以这样:
------------------------------------------
cout << hex << (int)&ch << endl;
------------------------------------------
分享到:
相关推荐
2 初探MATLAB 第二篇 绘图功能 3 二维平面绘图 4 三维立体绘图 5 特殊图形 6 图像显示与读写 7 动画制作 8 句柄图形与GUI设计 9 GUIDE:GUI设计环境 第三篇 变量与数据结构 10 矩阵的处理与运算 11 字符与字符串 12 ...
全书共分30章,主要内容包括初探C#及其开发环境,认识C#代码结构,C#程序设计基础,选择结构控制,循环结构控制,字符及字符串,数组、集合与哈希表,面向对象程序设计,Windows窗体设计,Windows应用程序常用控件...
全书共分30章,主要内容包括初探C#及其开发环境,认识C#代码结构,C#程序设计基础,选择结构控制,循环结构控制,字符及字符串,数组、集合与哈希表,面向对象程序设计,Windows窗体设计,Windows应用程序常用控件...
罗穗骞 后缀数组——处理字符串的有力工具 方展鹏 浅谈如何解决不平等博弈问题 姜碧野 SPFA算法的优化及应用 毛杰明 母函数的性质及应用 董华星 浅析字母树在信息学竞赛中的应用梅诗珂 信息学竞赛中概率问题求解初探...
6.3.2 字符串数组 208 6.4 字符串库函数 210 6.4.1 使用库函数复制字符串 210 6.4.2 使用库函数确定字符串的长度 211 6.4.3 使用库函数连接字符串 212 6.4.4 比较字符串 213 6.4.5 搜索字符串 216 6.5 分析...
第一篇为基础篇,包括了解PHP、着手准备开发PHP的条件、了解Web页面的设计、PHP开发基础、PHP流程控制语句、字符串操作、正则表达式、初探数组、日期和时间;第二篇为核心篇,包括文件和目录处理技术、图形图像处理...
5.1.2 数组初探 101 5.1.3 数组——物以类聚 104 5.1.4 数组元素的值内有乾坤 105 5.1.5 创建数组的简洁语法 106 5.2 数组的“名”与“实” 107 5.2.1 “名”与“实”分离的数组 107 5.2.2 一“实”多“名”的...
5.1.2 数组初探 101 5.1.3 数组——物以类聚 104 5.1.4 数组元素的值内有乾坤 105 5.1.5 创建数组的简洁语法 106 5.2 数组的“名”与“实” 107 5.2.1 “名”与“实”分离的数组 107 5.2.2 一“实”多“名”的...
02-初探MATLAB 03-二维平面绘图 04-三维立体绘图 05-特殊图形 06-动画制作 07-句柄式图形与GUI设计 08-句柄式图形与GUI设计 09-矩阵的处理与运算 10-字符与字符串 12-异质数组 13-结构数组 14-MATLAB 的运算 15-M...
近年部分信息学竞赛国家集训队队员的论文 主要内容包括动态规划,数学相关和字符串相关 例如: 基于连通性状态压缩的动态规划问题_Cdq 周源 dp斜率优化 信息学竞赛中概率问题...后缀数组——处理字符串的有力工具
全书共分30章,主要内容包括初探C#及其开发环境,认识C#代码结构,C#程序设计基础,选择结构控制,循环结构控制,字符及字符串,数组、集合与哈希表,面向对象程序设计,Windows窗体设计,Windows应用程序常用控件,...
全书共20章,分为4篇进行介绍,第1篇为基础篇,包括Java开发前奏、搭建Java开发环境、 扎实Java语言基本语法、掌握算法和流程控制、使用Eclipse开发工具、探秘面向对象程序设计、初探Java数组;第2篇为核心篇,包括...
主要内容包括初探C#及其开发环境、程序设计基础、程序流程控制、字符集字符串的使用、数组与集合、程序设计中的算法、面向对象程序设计、Windows窗体设计等内容。 适合有志于从事软件开发的初学者】高校计算机相关...
• 第1章MATLAB简介 ...• 第3章单元数组和结构 • 第4章字符串 • 第5章符号运算 • 第6章MATLAB绘图基础 • 第7章程序设计 • 第8章计算方法的MATLAB实现 • 第9章优化设计 • 第10章SIMULINK仿真初探
11.罗穗骞《后缀数组——处理字符串的有力工具》 12.方展鹏《浅谈如何解决不平等博弈问题》 13.姜碧野《SPFA算法的优化及应用》 14.毛杰明《母函数的性质及应用》 15.董华星《浅析字母树在信息学竞赛中的应用》 16....
27_C++面向对象模型初探_传智扫地僧 28_this指针 29_作业 源码及文档 01_上一次课程回顾 02_const修饰的是谁_传智扫地僧 03_this的const修饰课堂答疑 04_全局函数pk成员函数(返回元素,引用,星号this) 05_强化...
MQL4笔记 带代码示例 ...EA编程之数组函数 EA编程之图表函数 EA编程之账户函数 EA编程之字符函数 EA框架逻辑流程图 交易系统模型设计思路初探 如何怎样使用EA智能交易系统与MQ4程序语言介绍 移动止损策略与实现 .....
杨 培 -《非最优化算法初探》 张 辰 -《动态规划的特点及其应用》 张 力 -《类比思想在解题中的应用》 张一飞 -《冗繁削尽留清瘦——浅谈信息的充分利用》 ## 2001 高寒蕊 -《从圆桌问题谈数据结构的综合...
9.36、从输入流中获取数据并以字节数组返回 250 9.37、通过ANDROID 客户端上传数据到服务器 251 9.38、文件下载类 255 9.39、下载文件的进度条提示 263 9.40、通过HTTPCLIENT从指定SERVER获取数据 265 9.41、通过FTP...