第四章 串的基本概念
- 格式:ppt
- 大小:460.00 KB
- 文档页数:25


第四章 串
一、选择题
1.下列有关字符串的描述,正确的是( )
A.字符串是0个或多个字符构成的有限序列;
B.字符串是0个或多个字母不同的有限序列;
C.字符串中最少要有一个子符;
D.字符串中不能有空格字符。
2. 字符串S="string"中,包含的子串的个数是( )
A. 20 B. 21 C. 22 D. 23
3.目标串为T="this is a string",模式串P="string",进行模式匹配,有效位移是( )(起始位置为0)。
A. 9 B. 10 C. 11 D. 12
4.已知串S= "string",T="this",执行运算strlen(strcopy(S,T))的结果是( )
A. 4 B. 6 C. 10 D. 2
5.目标串为T="this is a string",模式串P="string",进行模式匹配,所有的无效位移数是( )
A. 6 B. 10 C. 16 D. 11
6.下列命题正确的是( )
A. 空串就是空白串; B. 空串不是串;
C. 空串是长度为0的字符串 D. 串相等指的是长度相等
7.若字符串采用链式存储,每个字符占用一个字节,每个指针在占用四个字节,则该字符串的存储密度为( )
A. 50% B. 25% C. 75% D. 20%
第四章犯罪概念
第一节 犯罪的本质
一、西方学者关于犯罪本质的观点
①权利侵害说:犯罪是侵害法律所赋予的权利。由费尔巴哈(Feuerbach)提出。
②法益侵害说:犯罪是对国家所保护的利益造成侵害或者使其招致危险。由德国刑法学家毕恩鲍姆(Birnbaum)提出,经李斯特(Liszt)继承、发展。该学说在大陆法系居于通说地位。
③文化规范违反说:犯罪是违反了文化规范。立足于宾丁的规范说,由M.E.迈耶(Mayer)提出。
④义务违反说:犯罪是对义务的违反。由德国学者夏弗斯塔茵(Schaffstein)提出。
⑤综合说:主张犯罪首先是对法益的侵害,同时也是对义务的违反。认为刑法规范虽然是保护法益的,但是,它是针对人的行为来保护法益的。刑法通过使法共同体成员的意志与法秩序的要求相一致来实现对法益的保护。
二、马克思主义关于犯罪本质的论述
◆“犯罪——孤立的个人反对统治关系的斗争,和法一样,也不是随心所欲地产生的。相反地,犯罪和现行的统治都产生于相同的条件。同样也就是那些把法和法律看作是某种独立自在的一般意志的统治的幻想家才会把犯罪看成是单纯对法和法律的破坏。”
第二节 犯罪的本质特征
一、犯罪的定义
(一)犯罪形式的定义
◆从犯罪的法律表现形式上给犯罪下定义:
①犯罪是违反刑事法律的行为
②犯罪是依法应当受到刑罚处罚的行为
③犯罪是违反刑法,应受刑罚处罚的行为
(二)犯罪的实质定义
◆从犯罪的社会属性或者从社会属性和法律属性相结合的角度对犯罪下的定义。
①英国法学家史蒂芬:“凡是从行为的有害性观点被认为是反对整个社会性的违法行为就是犯罪。”
②意大利加罗法洛:“犯罪是违反社会的怜悯和诚实两个道德情感的行为。”
③意大利菲利:“犯罪乃具有一定决意之权利侵害性的反社会行为。”
(三)犯罪的混合定义
◆从犯罪的形式定义和犯罪的实质定义相结合的角度对犯罪下的定义
①1960年《苏俄刑法典》第7条第1款:“凡本法典分则所规定的侵害苏维埃的社会制度和国家制度,侵害社会主义经济体系和社会主义所有制,侵害公民的人身权、政治权、劳动权、财产权以及其他权利的危害社会行为(作为或不作为),以及本法典分则所规定的其他各种侵害社会主义法律秩序的危害社会行为,都认为是犯罪。” ②我国1979年刑法:“一切危害国家主权和领土完整,危害无产阶级专政制度,破坏社会主义革命和社会主义建设,破坏社会秩序,侵犯全民所有的财产或者劳动群众集体所有的财产,侵犯公民私人所有的合法财产,侵犯公民的人身权利、民主权利和其他权利,以及其他危害社会的行为,依照法律应当受刑罚处罚的,都是犯罪;但是情节显著轻微危害不大的,不认为是犯罪。”
第四章 串
一、选择题
1A 2 B 3 D 4 D 5D
二、算法设计
1.分别在顺序存储和一般链接存储两种方式下,用C语言写出实现把串s1复制到串s2的串复制函数strcpy(s1,s2)。
顺序存储:
#include "string.h"
#define MAXN 100
char s[MAXN];
int S_strlen(char s[])
{
int i;
for(i=0;s[i]!='\0';i++);
return(i);
}
void S_strcpy(char s1[],char s2[]) //4.3题
{
int i;
for(i=0;s1[i]!='\0';i++)
s2[i]=s1[i];
s2[i]='\0';
}
一般链接存储:
#include "stdio.h"
typedef struct node
{
char data;
struct node *link;
}NODE;
NODE *L_strcpy(NODE *s1)
{
NODE *s2,*t1,*t2,*s;
if(s1==NULL) return(NULL);
else
{
t1=s1;
t2=(NODE *)malloc(sizeof(NODE));
s2=t2;
while(t1!=NULL)
{
s=(NODE *)malloc(sizeof(NODE));
s->data=t1->data; t2->link=s;
t2=s;
t1=t1->link;
}
t2->link=NULL;
s=s2;
s2=s2->link;
free(s);
return(s2);
}
}
2.在一般链接存储(一个结点存放一个字符)方式下,写出采用简单算法实现串的模式匹配的C语言函数int L_index(t,p)。
#include "stdio.h"
1 第四章 答案
4.1 简述下列每对术语的区别:
空串和空白串;串常量和串变量;主串和子串;静态分配的顺序串和动态分配的顺序串;目标串和模式串;有效位移和无效位移。
答:●空串是指不包含任何字符的串,它的长度为零。
空白串是指包含一个或多个空格的串,空格也是字符。
●串常量是指在程序中只可引用但不可改变其值的串。
串变量是可以在运行中改变其值的。
●主串和子串是相对的,一个串中任意个连续字符组成的串就是这个串的子串,而包含子串的串就称为主串。
●静态分配的顺序串是指串的存储空间是确定的,即串值空间的大小是静态的,在编译时刻就被确定。
动态分配的顺序串是在编译时不分配串值空间,在运行过程中用malloc和free等函数根据需要动态地分配和释放字符数组的空间(这个空间长度由分配时确定,也是顺序存储空间)。
●目标串和模式串:在串匹配运算过程中,将主串称为目标串,而将需要匹配的子串称为模式串,两者是相对的。
●有效位移和无效位移:在串定位运算中,模式串从目标的首位开始向右位移,每一次合法位移后如果模式串与目标中相应的字符相同,则这次位移就是有效位移(也就是从此位置开始的匹配成功),反之,若有不相同的字符存在,则此次位移就是无效位移(也就是从此位置开始的匹配失败)。
4.2 假设有如下的串说明:
char s1[30]="Stocktom,CA", s2[30]="March 5 1999", s3[30], *p;
(1)在执行如下的每个语句后p的值是什么?
p=stchr(s1,'t'); p=strchr(s2,'9'); p=strchr(s2,'6');
(2)在执行下列语句后,s3的值是什么?
strcpy(s3,s1); strcat(s3,","); strcat(s3,s2);
(3)调用函数strcmp(s1,s2)的返回值是什么?
(4)调用函数strcmp(&s1[5],"ton")的返回值是什么?