当前位置: 首页 > news >正文

数据结构第4章字符串:单元测试19题全解析(含串匹配、子串、空串与空格串区别)

第4字符串单元测试

1.以下陈述中正确的是(A)。

A.串是一种特殊的线性表

B.串的长度必须大于零

C.串中元素只能是字母

D.空串就是空格串

2.设有两个串pq,其中qp的子串,qp中首次出现的位置的算法称为(C)。

A.求子串

B.连接

C.匹配

D.求串长

3.串是(D)。

A.不少于一个字母的序列

B.任意个字母的序列

C.不少于一个字符的序列

D.有限个字符的序列

4.串的长度是指(B)。

A.串中所含不同字母的个数

B.串中所含字符的个数

C.串中所含不同字符的个数

D.串中所含非空格字符的个数

5.C语言中,存储字符串“ABCD”需占用(C)字节。

A.4

B.2

C.5

D.3

6.下面关于串的叙述中,不正确的是(B)。

A.串是字符的有限序列

B.空串是由空格构成的串

C.模式匹配是串的一种重要运算

D.串即可以采用顺序存储,也可以采用链式存储

7.串与普通的线性表相比较,它的特殊性体现在(C)。

A.顺序的存储结构

B.链接的存储结构

C.数据元素是一个字符

D.数据元素可以任意

8.空串与空格串(B)。

A.相同

B.不相同

C.可能相同

D.无法确定

9.两个字符串相等的条件是(D)。

A.两串的长度相等

B.两串包含的字符相同

C.两串的长度相等,并且两串包含的字符相同

D.两串的长度相等,并且对应位置上的字符相同

10.在实际应用中,要输入多个字符串,且长度无法预定。则应该采用()存储比较合适(A)。

A.链式

B.顺序

C.堆结构

D.无法确定

11.下列关于串的叙述中,不正确的是(B)。

A.串是字符的有限序列

B.空串是由空格构成的串

C.模式匹配是串的一种重要运算

D.串既可以采用顺序存储,也可以采用链式存储

12.串是一种特殊的线性表,其特殊性体现在(B)。

A.可以顺序存储

B.数据元素是一个字符

C.可以链接存储

D.数据元素可以是多个字符

13.串函数StrCmp(“abA”,”aba”)的值为(D)。

A.1

B.0

C.abAaba

D.-1

14.C语言中,存储字符串“ABCD”需要占用(C)字节。

A.4

B.2

C.5

D.3

15.设主串为“ABcCDABcdEFaBc”,以下模式串能与主串成功匹配的是(A)。

A.Bcd

B.BCd

C.ABC

D.Abc

16.字符串a1=“AEIJING”a2=“AEI”a3=“AEFANG”a4=“AEFI”中最大的是(A)。

A.a1

B.a2

C.a3

D.a4

17.字符串〝abcd321ABCD〞的子串是(B)。

A.abcABCD

B.21ABC

C.abcD

D.321a

18.数组a经初始化char a[ ]=“English”a[1]中存放的是(C)。

A.n

B.E

C.字符n

D.字符E

19.空串的长度为(A)。

A.0

B.1

C.2

D.3


数据结构课程中关于“字符串”的知识补充

一、字符串(串)的基本概念

术语定义
串(String)由零个或多个字符组成的有限序列
串长度串中字符的个数(空串长度为0)
空串长度为0的串,不包含任何字符,用""表示
空格串由一个或多个空格字符组成的串,长度 > 0,如" "
主串包含子串的串
子串串中任意连续字符组成的子序列
子串位置子串在主串中第一次出现时的第一个字符在主串中的序号

二、串的存储结构

1. 顺序存储(定长顺序串)
#define MaxSize 255 typedef struct { char data[MaxSize]; int len; // 串的实际长度 } SString;
  • 优点:存取简单,随机访问

  • 缺点:最大长度固定,可能浪费空间或溢出

2. 链式存储(链串)
typedef struct node { char data; struct node *next; } LinkStrNode;
  • 优点:长度动态,插入删除方便

  • 缺点:存储密度低(每个字符需要一个指针)

  • 改进:每个结点存多个字符(块链)

3. 堆分配存储
typedef struct { char *ch; // 按需分配的空间 int len; } HString;
  • 优点:动态分配,灵活高效

比较项顺序串链串堆串
存储密度
动态扩展需预分配灵活灵活
随机访问O(1)O(n)O(1)

三、串的基本运算

运算函数名(常见)说明
串赋值StrAssign(s,t)将串t的值赋给s
串复制StrCopy(s,t)将t复制到s
串比较StrCompare(s,t)比较ASCII码,s>t返回正数,相等返回0
求串长StrLength(s)返回串中字符个数
串连接Concat(s,t)将t连接到s末尾
求子串SubString(s,pos,len)从pos位置取len个字符
模式匹配Index(s,t)求t在s中首次出现的位置
插入StrInsert(s,pos,t)在pos位置插入串t
删除StrDelete(s,pos,len)删除从pos开始的len个字符
替换Replace(s,t,v)将t替换为v

四、模式匹配算法

1. 简单匹配算法(BF算法)
int Index(SString S, SString T) { int i = 1, j = 1; while (i <= S.len && j <= T.len) { if (S.data[i] == T.data[j]) { i++; j++; } else { i = i - j + 2; j = 1; } } if (j > T.len) return i - T.len; return 0; }
  • 时间复杂度:O(n×m),n为主串长,m为子串长

  • 最坏情况:O((n-m+1)×m)

2. KMP算法

核心思想:利用已匹配部分的信息,避免回溯主串指针

next数组定义

next[j] = 最大相等前后缀长度 + 1

j123456
模式ABAABC
next011223

nextval数组(改进版)

void get_nextval(char *T, int nextval[]) { int i = 1, j = 0; nextval[1] = 0; while (i < T[0]) { if (j == 0 || T[i] == T[j]) { i++; j++; if (T[i] != T[j]) nextval[i] = j; else nextval[i] = nextval[j]; } else j = nextval[j]; } }

时间复杂度:O(n + m)

五、易错知识点总结

  1. 空串 ≠ 空格串

    • 空串长度0

    • 空格串长度≥1,包含空格字符

  2. "S" 与 'S' 的区别

    • "S":字符串常量,占2字节(S + \0)

    • 'S':字符常量,占1字节

  3. 串的比较规则
    从左到右逐个字符比较ASCII码,直到出现不同字符或串结束

  4. 子串必须是连续的
    "21ABC"不是"abcd321ABCD"的子串(不连续)

  5. C语言中字符串以\0结束
    存储长度 = 实际字符数 + 1

六、单元测试答案解析(部分易错题)

题号答案解析
1A串是字符的线性序列,故为特殊的线性表
2C求子串首次出现位置称为模式匹配
5C"ABCD" 占5字节(含\0)
6B空串≠空格串,空格串长度>0
7C串的特殊性在于数据元素是单个字符
8B空串与空格串不相同
13D"abA" < "aba"('A' ASCII 65 < 'a' ASCII 97)
17B子串必须连续,"21ABC"在"abcd321ABCD"中不存在(注意大小写)
http://www.jsqmd.com/news/811138/

相关文章:

  • 基于Node.js与OpenAI API构建智能WhatsApp机器人全攻略
  • 告别机械生硬感:我熬夜实测了4款英文降AI工具,教你搞定结构级优化
  • FigmaCN终极指南:3分钟让Figma界面秒变中文的完整教程
  • NR PUCCH资源分配与复用机制深度解析
  • 3步找回遗忘的压缩包密码:免费开源工具完整指南
  • 中小企业AI实战指南:从营销到客服的4大应用场景与避坑策略
  • AMD Ryzen调试工具SMUDebugTool:从新手到专家的终极指南
  • 英雄联盟智能助手Seraphine:5分钟快速上手的免费自动化游戏辅助工具
  • 毕业设计 基于深度学习二维码检测识别系统
  • AI编程工具选型与落地实战:从编码助手到团队提效
  • 从零到一:DPDK高性能网络开发实战指南
  • 如何在10分钟内快速掌握LeRobot机器人AI控制框架:新手终极指南
  • Shell 脚本有哪些不同的类型?
  • DataClaw:基于MCP协议的本地AI代理数据库权限网关设计与实践
  • PrimeTime 2018.06 新手避坑指南:从快捷键到报告解读,5个最容易被忽略的实用技巧
  • 汽车静态电流挑战:从芯片到系统的低功耗设计策略
  • STM32H7硬件JPEG编码实战:从RGB565到JPEG文件,一个完整项目的避坑记录
  • 3分钟极速汉化Android Studio:免费中文语言包完整教程
  • Matplotlib保存图片尺寸总不对?搞懂bbox_inches=‘tight‘与figsize的‘相爱相杀’,一篇就够了
  • Kubernetes部署以太坊节点:Helm Chart实战与生产级运维指南
  • AI代码智能体突破电话验证瓶颈:从环境模拟到混合架构的实战方案
  • AI全栈开发实战:12个月12个应用,我的极限生产力实验
  • Hermes Agent 框架对接 Taotoken 自定义提供方的配置要点与排错
  • 基于tg-ai-connector构建自托管Telegram AI机器人:从原理到部署实践
  • 别再手动同步!用Gemini自动归档Gmail→Drive→Sheets全流程(Python脚本开源+错误率<0.3%生产验证)
  • OpenHarmony移植实战:解决ACE组件编译依赖冲突的通用方案
  • 法律条款时间逻辑的DSL与状态机实现:从概念到工程实践
  • R3nzSkin国服换肤工具:2025年英雄联盟皮肤自定义终极指南
  • zotero-pdf-translate插件失效怎么办?5个实用修复方案帮你快速恢复翻译功能
  • AI智能体协同框架agentsync:事件驱动与状态同步实战解析