数据结构

数据结构里,设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()。A、求子串B、联接C、匹配D、求串长

题目

数据结构里,设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()。

  • A、求子串
  • B、联接
  • C、匹配
  • D、求串长
参考答案和解析
正确答案:C
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

设有两个串p和q,求q在p中首次出现位置的运算称作

A.连接

B.模式匹配

C.求子串

D.求串长


正确答案:B
解析:子串的定位操作通常称作串的模式匹配,是各种串处理系统中最重要的操作之一,算法的基本思想是:从主串的开始字符起和模式的第一个字符比较,若相等则继续比较后续字符,否则从主串的下一个字符起再重新和模式的字符比较,依次类推,直至模式中的每一个字符依次和主串中的一个连续的字符序列相等,称匹配成功,否则称匹配不成功。

第2题:

设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( )。

A、求子串

B、联接

C、模式匹配

D、求串长


正确答案:C

第3题:

设有两个串p和q,求q在p中首次出现的位置的运算称作模式匹配。()

此题为判断题(对,错)。


参考答案:√

第4题:

没有两个串p和q,求q在p首次出现位置的运算称作

A.连接

B.模式匹配

C.求于串

D.求串长


正确答案:B
解析:子串的定位操作通常称作串模式匹配,是各种申处理系统中最重要的操作之一,算法的基本思想是:从主串的开始字符起和模式的第一个字符比较,若相等则继续比较后续字符,否则从主串的下一个字符起再重新和模式的字符比较,依次类推,直至模式中的每一个字符依次和主串中的一个连续的字符序列相等,称匹配成功,否则称匹配不成功。

第5题:

阅读下列算法说明和算法,将应填入(n)处的语句写在对应栏内。

【说明】

本程序可以将字符串s1中出现的所有s2子串替换成s3,形成一个新串,但不破坏字符串s1。

【代码】

include<stdio.h>

include<stdlib.h>

include<string.h>

char*replace(char *s1, char *s2,char *s3)

{ char *p, *q, *r, *s; int |2,|3, i=0;

|2=strlen(s2);

|3=strlen(s3);

p=s1;

while((p=strstr(p,s2))!=NULL)

{ i++; /* 统计s2串出现的次数*/

(1);

}

i=(2);

s=r=(char*)malloc(i); /*分配动态内存存放新字符串*/

p=s1;

while(1)

{ q=strstr(p, s2); /* s2串是否在s1中出现,q是首次出现的位置*/

if(q!=NULL)

{ i=q-p;

(3);

r+=i;

(4);

r+=|3;

p=q+|2; /*将指向s1串的指针移到s2子串出现的位置后,

为下一次循环做好准备*/

}

else /*q为空,表示剩余的s1串中已经没有s2*/

{ (5);

break; /*终止循环*/

}

}

return(s); /*返回指向所形成的新串的指针*/

}

void main()

{ char *a="sabcababde", *b="ab", *c="efg", *d;

d=replace(a, b, c); printf("result=%s\n", d); free(d);

}


正确答案:(1)p+=12 (2)strlen(s1)-i*12+i*13+1 (3)strncpy(rpi) (4)strcpy(rs3) (5)strcpy(rp)
(1)p+=12 (2)strlen(s1)-i*12+i*13+1 (3)strncpy(r,p,i) (4)strcpy(r,s3) (5)strcpy(r,p) 解析:本题考查用C语言实现对字符串的操作。
题目要求将字符串s1中出现的所有子串s2替换成s3,形成一个新串,但不破坏字符串s1。要不破坏字符串s1,只有用一个新串来存放处理结果;要用到新串,那么就需要重新分配空间。
第(1)空在第一个循环体中,此循环体的作用在注释中已经给出,用来统计串s2在串s1中出现的次数,这里的统计变量已经给出,并将结果存放在统计变量i中,但每次统计成功后串s1的位置应该往后移动串s2的长度,由程序我们可以看出,串s1存放在指针变量p中,因此,指针变量p指的位置需要往后移动串s2的长度,而串s2的长度存放在变量12中。因此,此空答案为p+=12。
第(2)空很明显是用来给变量i赋一个值,但根据s=r=(char*)malloc(i)语句我们可以推断出,当前变量i中存放的是新串的长度。而新串的长度应该等于串s1的长度减去串中x个串s2的长度,加上x个串s3的长度再加1,而在上面的循环中已经求出了串s2在串s1中出现的次数,结果存放在变量i中。因此,此空答案为strlen(sl)-i*12+i*13+1。
第(3)空是在if(q !=NULL)成立的情况下运行的语句,而变量q指向的是s2在s1中首次出现的位置,如果条件成立,说明串s2在串s1中出现了,语句i=q-p用来表示出现的位置到s1开始位置的距离。在这些条件都清楚了后,应该往新的串中写字符了,首先写串s1的前i个字符,此空就是用来完成这个功能的,因此,此空答案为strncpy(r,p,i)。
第(4)空是接着上一空而来的,在上面我们[分析]到,把串s1的前i个字符写入新串,那么在新串中接着要出现的应该是替换串s2的串s3,此空的任务应该是将串s3写入新串中,因此,此空答案为strcpy(r,s3)。
第(5)空是在if(q !=NULL)不成立的情况下运行的语句,这说明串s2不在串s1中出现,在这种情况下,串应该不需要进行替换操作,而直接将串s1写入到新串中,此空的作用就是用来实现这个功能的,因此,此空答案为strcpy(r,p)。

第6题:

求字符串T在字符串S中首次出现的位置的操作称为()。

A、串的模式匹配

B、求子串

C、求串的长度

D、串的连接


参考答案:A

第7题:

设有两个串s1和s2,求s2在s1中首次出现的位置的运算称为()。

A、求子串

B、求串长

C、联接

D、模式匹配


参考答案:D

第8题:

设有两个串T和P,求P在T中首次出现的位置的串运算称作()。

A、联接

B、求子串

C、字符定位

D、子串定位


正确答案:D

第9题:

设有两个串p和q,求q在p中首次出现位置的运算称为( )。

A.连接

B.模式匹配

C.求子串

D.求串长


正确答案:B
解析: 字串的定位操作通常称为串的模式匹配,是各种串处理系统中最重要的操作之一。

第10题:

设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()。

A.求子串

B.联接

C.匹配

D.求串长


正确答案:C