一、假设有两个串 A 和 B ,求 B 在 A 中首次出现的位置的操作,我们称为( )。
A、连接
B、模式匹配
C、求子串
D、求串长
答案:B
解析:模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配。
假设P是给定的子串,T是待查找的字符串,要求从T中找出与P相同的所有子串,这个问题成为模式匹配问题。P称为模式,T称为目标。如
果T中存在一个或多个模式为P的子串,就给出该子串在T中的位置,称为匹配成功;否则匹配失败。
二、下面函数的功能是
int fun (char *s)
{
char *p=s;
while(*p++);
return p-s-1;
}
A、计算字符串的位(bit)数
B、复制一个字符串
C、求字符串的长度
D、求字符串存放的位置
答案:C
解析:
int fun (char *s)//此处可知,返回值类型为整形int;
{
char *p=s; //将s的值赋值给p,即p和s同指向某一个地址;
while(*p++);//这条语句为这道题的坑,即循环体是分号。。。只要(*p++) != 0,就一直向后移动,直至p指向字符串末尾的"\0";
return p-s-1;//此时,p指向字符串的末尾(\0的位置),s指向字符串的头,则,p-s-1就是字符串的长度,-1就是去掉"\0"的长度1
}
三、设有两个串S1和S2,求S2在S1中首次出现的位置的运算称作()
A、求子串
B、判断是否相等
C、模型匹配
D、连接
答案:C
四、以下程序段的输出结果是
char s[]="\\123456\123456\t";
printf("%d\n",strlen(s));
A、12
B、13
C、16
D、以上都不对
答案:A
解析:这里考查转义字符,注意 \\ 表示字符 \
\123表示字符 {
\t 表示制表符
这些都是一个字符;
所以共12个字符。
知识拓展:char s[] = "//123456/123456/t"; 这样strlen(s)输出17个字符。
五、线性表中每一个元素都有一个前驱和一个后继