以下关于字符串的判定语句中正确的是()。
这题考数据结构基础,拿到题先别急着看选项,脑子里过一遍线性表、串的定义和空串的概念,把每个选项跟定义对一对,就能一眼看出哪个是陷阱。
最容易掉进两个坑:一是把空串和空格串搞混,以为全是空格的串就是空串,其实空格也是字符,长度肯定大于0;二是觉得串必须有内容,忽略了空串这种特殊情况,长度可以是0;三是看到C语言里字符串用char数组存着,就误以为不能叫数组,其实char[]就是数组,只是专门用来存字符的数组。
这题考查的是字符串(串)的基本概念和数据结构分类。在NOIP初赛这类题目里,命题人特别喜欢拿几个容易混淆的定义来挖坑,比如空串和空格串的区别、线性表的抽象定义、以及存储结构的具体实现。考频上看,串相关题目在历年计算机基础部分出现频率稳定,2016年这道就是典型代表,说明这类基础概念辨析是必考项。
字符串是什么? 字符串就是一串字符排在一起,比如"hello"。从数据结构角度看,它本质上是线性表——元素一个接一个,有顺序,有头有尾。只不过这里的元素全是字符,所以叫"串"。
线性表是个很宽泛的概念,数组、链表、队列都是线性表。字符串只是其中一种特殊形式,所以A选项说"字符串是一种特殊的线性表",这话完全站得住脚。
空串和空格串是两个完全不同的东西,这也是命题人最爱设的陷阱。
空格也是字符!C语言里空格就是ASCII码32,它和普通字母一样算一个元素,所以由空格组成的串绝对不是空串。
串能不能用数组表示? 能,而且是最常用的表示方法。C语言里char[]就是字符数组,比如char s[] = "abc";,s就是一个数组,存的就是字符串。所以"字符串不可以用数组来表示"这种说法纯属瞎扯。