精华内容
下载资源
问答
  • 数据元素为什么只是一个字符?

    千次阅读 多人点赞 2020-05-05 22:01:15
    数据元素为什么只是一个字符? 这是我遇到的一个小问题,看网上没有人对此有疑问(我可能脑子有坑)…就把想法记录下来,万一有帮助。 问题来源 问题来源于一道选择题: 是一种特殊的线性表,其特殊性体现在...

    串的数据元素为什么只是一个字符?

    这是我遇到的一个小问题,看网上没有人对此有疑问(我可能脑子有坑)…就把想法记录下来,万一有帮助。

    问题来源

    问题来源于一道选择题:
    串是一种特殊的线性表,其特殊性体现在()
    A. 可以顺序存储 B. 数据元素是一个字符
    C. 可以链式存储 D. 数据元素是多个字符
    正确答案:B
    我当时的选择:D

    错误原因

    当时做这个题时,只想到了一个特殊点:
    线性表在操作时是只针对表某一个元素,而串则是针对一个子串。所以就想到了“多个”二字,进而选择了D。
    关键没有注意数据元素四个字

    知识回顾

    线性表的定义(简述)

    线性表是具有相同特性数据元素的一个有限序列。
    (由若干个数据元素组成的有限序列

    串的定义

    例如:s=“a1a2…ai…an”
    s为串名,用双引号括起来的字符序列为串值(引号本身不属于串的内容),ai(1<=i<=n)是一个任意字符,也称为串的元素(即数据元素),是构成串的基本单位,i是它在整个串中的序号,n为串的长度,表示串中所包含的字符个数。

    数据元素

    数据元素是数据的基本单位,它也可以再由不可分割的数据项组成。

    总结

    看到这里就应该有所明白了,串的数据元素,也就是串的基本单位在这里是一个字符,而非多个字符。多个字符的话,那就不叫数据元素,而叫做串的子串了,子串又是由多个数据元素组成的有限序列

    展开全文
  • (3.5分)【判断题】函数中必须包含return语句。 (3.5分)【单选题】对于序列 s,哪个选项能够返回序列s中第i到j以k为步长的元素子序列? (3.0分)【单选题】Python 中,for 和 while 可以有 else 语句? (2.0分)【判断题】...

    【判断题】定义Python函数时,如果函数中没有return语句,则默认返回空值None。 (3.5分)

    【判断题】函数中必须包含return语句。 (3.5分)

    【单选题】对于序列 s,哪个选项能够返回序列s中第i到j以k为步长的元素子序列? (3.0分)

    【单选题】Python 中,for 和 while 可以有 else 语句? (2.0分)

    【判断题】元组可以作为集合的元素。 (2.0分)

    【判断题】字典中的值只能够是字符串类型。() (2.0分)

    【判断题】在函数内部没有办法定义全局变量。 (3.5分)

    【填空题】表达式 'ab' in 'acbed' 的值为 ________ 。 (5.0分)

    【单选题】Python 中,以下哪个代码是正确的元组? (3.0分)

    【单选题】以下哪条语句定义了一个Python字典( ) (3.0分)

    【单选题】for char in 'PYTHON STRING':

    if char == ' ':

    break

    print(char, end='')

    if char == 'O':

    continue 以上代码输出的结果是? (2.0分)

    【填空题】有一个数 x 在区间 [-5,0] 内 , 写出其条件表达式 。 (5.0分)

    【判断题】定义函数时,即使该函数不需要接收任何参数,也必须保留一对空的圆括号来表示这是一个函数。 (3.5分)

    【判断题】Python集合中的元素可以是元组。 (2.0分)

    【判断题】Python集合中的元素可以是列表. (2.0分)

    【判断题】列表的索引是从0开始的。() (2.0分)

    【判断题】函数内部定义的局部变量当函数调用结束后被自动删除。 (3.5分)

    展开全文
  • 数据结构之

    万次阅读 多人点赞 2017-09-10 17:27:12
    字符简称,是一种特殊的线性表,它的数据元素仅由一个字符组成。2、的定义 (String)是由零个或多个字符组成的有限序列,又称字符。其中s是名,用双引号括起来的字符序列为值,但引号本身并不属于的...

    1、串的概念
    字符串简称串,是一种特殊的线性表,它的数据元素仅由一个字符组成。

    2、串的定义
    串(String)是由零个或多个字符组成的有限序列,又称字符串。

    这里写图片描述

    其中s是串名,用双引号括起来的字符序列为串值,但引号本身并不属于串的内容。ai(1<=i<=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号;n为串的长度,表示串中所包含的字符个数。

    3、术语描述
    (1)长度–串中字符的个数,称为串的长度。
    (2)空串–长度为零的字符串称为空串。
    (3)空格串–由一个或多个连续空格组成的串称为空格串。
    (4)串相等–两个串相等,是指两个串的长度相等且对应的字符都相等。
    (5)自串–串中任意连续的字符组成的子序列称为该串的子串。
    (6)主串–包含子串的串为该子串的主串。
    (7)模式匹配–子串的定位运算又称为模式匹配,是一个求子串的队医给字符在主串中序号的运算。被匹配的主串称为目标串,子串称为模式。

    例子1:字符串的长度及子串的位置。
    字符串
    S1=“SHANG”
    S2=“HAI”
    S3=“SHANGHAI”
    S4=SHANG HAI"
    S1是S3、S4的子串,S1在S3、S4中的位置都为1。
    S2也是S3、S4的子串,S2在S3中的位置为6;S2在S4中的位置为7。

    4、串的表示和实现
    因为串是数据元素类型为字符型的线性表,所以用于线性表的存储方式仍适合与串。但是由于串中的数据元素是单个字节,其存储方式又有其特殊之处。

    4-1、定长顺序存储
    类似于线性表,可以用一组地址连续的存储单元依次存放串中的各个字符序列,利用存储单元地址的顺序表示串中字符的相邻关系。

    4-1-1 定长存储的C语言描述
    在C语言中,字符串顺序存储可以用一个字符型数组和一个整型变量表示,其中字符数量足存储串值,整型变量表示串的长度。

    
    #define MAXLEN 10
    typedef struct
    {
    	char vec[MAXLEN];
    	int len;
    } Str;//可用Str来定义该类型的结构体变量
    
    

    4-1-2 存储方式
    当计算机按字节(Byte)为单位便地址时,一个存储单元刚好存储一个字符,串中相邻的字符顺序地存储在地址相邻的存储单元中.
    当计算机按字(例如1字32为)为单位便地址时,一个存储单元可以有4个字节组成。此时顺序存储结构又有非紧凑格式和紧凑格式两种存储方式。

    (1)非紧凑格式
    S=“String Structure”,计算机字长为32为(4个Byte),使用非紧凑格式一个地址只能存储一个字符,如图5-1所示。优点是运算处理简单,但缺点是存储空间十分浪费。

    这里写图片描述

    (2)紧凑格式
    同样存储S=“String Structure”,使用紧凑格式格式一个地址能存四个字符,如图5-2所示。紧凑存储的优点是空间利用率高,缺点是对串中字符处理的效率低。

    4-2、链式存储
    对于长度不确定的字符串的输入,若采用定长字符串存储就会产生这样的问题:存储空间定的大,而实际输入字符串长度小,则造成内存空间的浪费,反之,存储空间定的小,而实际输入字符串长度大,则存储空间不够用。此时可采用链接存储的方法。

    4-2-1 链式存储的描述
    用链表存储字符串,每个结点有两个域:一个是数据域(data)和一个指针域(next)。

    这里写图片描述

    其中数据域(data)–存储串中的字符。
    指针域(next)–存放后继结点的地址。
    仍然以存储S=“String Structure” 为例,链式存储结构如图所示。

    这里写图片描述

    (1)链式存储的优点–插入、删除运算方法;
    (2)链式存储的缺点==存储,检索效率较低。

    由于字符串的特殊性,用链表存作为字符串的存储方式也不太实用,因此使用较少。

    4-3 、串的堆分配存储结构
    在实际应用中,玩玩要定义很多字符串,并且各字符串长度在定义之前又无法确定。在这种情况下,可以采用堆分配存储(也称为索引存储),这是一种动态存储结构。

    4-3-1 堆分配存储的方法
    (1)开辟一块地址连续的存储空间,用于存储各串的值,该存储空间称为"堆"(也称自由存储区)
    (2)另外建立一个索引表,用来存储串的名称(name),长度(length)和该串在"堆"中存储的起始地址(Start)。
    (3)程序执行过程中,每产生一个串,系统就从"堆"中分配一快大小与串的长度相同的连续的空间,用于存储该串的值,并且在索引表中增加一个索引项,用于登记该串的名称、长度、和该串的起始地址。

    4-3-2 索引存储的例子
    设字符串:A=“Red” B=“Yellow” C=“Blue” D=“White”
    用指针free指向堆中的未使用空间的首地址。
    索引表如图5-5所示

    这里写图片描述

    考虑到对字符串的插入和删除操作,可能引起字符串的长度变化,在“堆”中为串值的分配空间是,可预留适当的空间。这时,索引表的索引项应增加一个域,用于存储该串在“堆”中拥有的实际存储单元的数量。当字符串长度等于该串的实际存储单元时,就不能对串进行插入操作。

    4-3-3 带长度的索引表的C语言描述
    如图5-5所示,索引项的结点类型为:

    #define MAXLEN 10
    typedef struct
    {
    	char name[MAXLEN];//串名
    	int length;//串长
    	char *Stradr;//起始地址
    } LNode 
    
    

    5、串的基本运算

    (1)、求串长LenStr(s)
    操作条件:串s存在。
    操作结果:求出串s的长度。

    (2)、串连接ConcatStr(s1,s2)
    操作条件:串s1,s2存在。
    操作结果:新串s1是串s1和串s2连接以后的新串,原串s2值不变,串s1的值则改变。
    例子:设s1=“Micsosoft”,s2=“Office”。
    操作结果是s1=“MicsosoftOffice”; s2=“Office”。

    (3)、求子串SubStr(s,i,len)
    操作条件:串s存在。
    操作结果:返回从串s的第i个字符开始的长度为len的子串。len=0得到的是空串。
    例子:SubStr(“abcdefghi”,3,4)=“cdef”。

    (4)、串比较EqualStr(s1,s2)
    操作条件:串s1,s2存在。
    操作结果:若s1等于s2,返回值为0;若s1小于s2,返回值小于0; 若s1大于s2,返回值大于0。

    (5)、子串查找IndexStr(s,t)
    找子串t在主串s中首次出现的位置(也称模式匹配)
    操作条件:串s,t存在。
    操作结果:若t是s的子串,则返回在s中首次出现的位置,否则返回值为0。
    例子:子串定位
    IndexStr(“abcdebda”,“bc”)=2;
    IndexStr(“abcdebda”,“ba”)=0;

    (6)、串插入InsStr(s,t,i)
    操作条件:串s,t存在。
    操作结果:将串t插入到串s中的第i个字符前,s的串值发生改变。

    (7)、串删除DelStr(s,i,len)
    操作条件:串s存在。
    操作结果:删除串s中第i个字符起长度为len的子串,s的值改变。

    6、使用定长顺序串的结构代码实现操作

    6-1、串结构体定义

    
    #define MAXLEN 10//定义窜的最大长度
     
    typedef struct
    {
    	char vec[MAXLEN];
    	int len;//串的实际长度
    } Str;//可用Str来定义该类型的结构体变量
    
    

    在串尾存储一个不会在串中出现的特殊字符作为串的终结符,以此表示串的结尾。比如C语言中处理定长串的方法就是这样的,它是用‘\0’表示串的结束,如图5-6所示。

    这里写图片描述

    (1) 求串的长度
    用判断当前字符是有是‘\0’来确定串是否结束,若非‘\0’,则表示字符串长度的i增加1;若是‘\0’,则表示字符串结束,跳出循环,i即字符串的长度。

    int LenStr(Str *r){
    
    	int i=0;
    	while(r->vec[i]!='\0'){
    		i++;
    	}
    
    	return i;
    }
    

    测试代码如下:

    
    void ShowStr(Str *r){
    	printf("\n\t\t该串值为: ");
    	if(r->vec[0]=='\0'){
    		printf("空串! \n");
    	}else{
    		puts(r->vec);//使用puts函数输出字符串,格式为 puts(字符串组名)
    	}
    }
    int main()
    {
    
    	Str a;
    	Str *r=&a;
    	r->vec[0]='\0';
    	char choice;
    	int ch=1;
    	while(ch!=0){
    		printf("\n");
    		printf("\n\t\t        串子系统                  *");
    		scanf("%c",&choice);
    		getchar();
    		if(choice=='1'){
    			printf("\n\t\t请输入一个字符串: ");
    			gets(r->vec);//使用get函数输入字符串 格式为 gets(字符串组名)
    			r->len=LenStr(r);
    		}else if(choice=='8'){
    			ShowStr(r);
    			int n=LenStr(r);
    			printf("串长度为:%d",n);
    		}
    	}
    
    	return 0;
    }
    

    测试结果:

    这里写图片描述

    (2) 串连接
    把两个串r1和r2首尾连接成一个新串r1,即:r1=r1+r2。

    void ConcatStr(Str *r1,Str *r2){
    	int i;
    	printf("\n\t\t r1=%s  r2=%s\n",r1->vec,r2->vec);
    	if(r1->len+r2->len>MAXLEN){
    		printf("两个串太长,溢出! ");//连接后的串长超过串的最大长度
    	}else{
    		for( i=0;i<r2->len;i++){
    			r1->vec[r1->len+i]=r2->vec[i];//进行连接
    		}
    		r1->vec[r1->len+i]='\0';
    		r1->len=r1->len+r2->len;//修改连接后的新串的长度
    	}
    	printf("\n\t\t r1=%s  r2=%s\n",r1->vec,r2->vec);
    
    }
    

    测试代码如下:

    
    int main()
    {
    
    	Str a,b;
    	Str *r=&a,*r1;
    	r->vec[0]='\0';
    	char choice;
    	int ch=1;
    	while(ch!=0){
    		printf("\n");
    		printf("\n\t\t        串子系统                  *");
    		scanf("%c",&choice);
    		getchar();
    		if(choice=='1'){
    			printf("\n\t\t请输入一个字符串: ");
    			gets(r->vec);//使用get函数输入字符串 格式为 gets(字符串组名)
    			r->len=LenStr(r);
    		}else if(choice=='2'){
    			printf("\n\t\t请输入所要连接字符串: ");
    			r1=CreateStr(&b);
    			printf("\n\t\tr1为: ");
    			puts(r1->vec);
    			ConcatStr(r,r1);
    			printf("\n\t\t连接后的新串值为: ");
    			puts(r->vec);
    			int n=LenStr(r);
    			printf("新串长度为:%d",n);
    
    		}
    		else if(choice=='8'){
    			ShowStr(r);
    			int n=LenStr(r);
    			printf("串长度为:%d",n);
    		}
    	}
    
    	return 0;
    }
    

    测试结果:

    这里写图片描述

    (3) 求子串
    在给定的字符串r中从指定位置i开始连续取出j个字符构成子串r1。

    void SubStr(Str *r,Str *r1,int i ,int j){
    
    	if(i+j-1>MAXLEN){
    		printf("子串越界! ");
    	}else{
    		for(int k=0;k<j;k++){
    			r1->vec[k]=r->vec[i+k-1];//从r中取出子串
    		}
    
    		r1->len=j;
    		r1->vec[r1->len]='\0';
    	}
    
        printf("\n\t\t 取出字符为r1=%s ",r1->vec);
    }
    

    测试代码如下:

    else if(choice=='3'){
    			printf("\n\t\t请输入从第几个字符开始: ");
    			scanf("%d",&i);
    			getchar();
    			printf("\n\t\t请输入取出的连续字符数: ");
    			scanf("%d",&j);
    			getchar();
    			SubStr(r,&a,i ,j);
    			
    
    		}
    

    测试结果:

    这里写图片描述

    (4) 串比较
    两个串的长度相等且各对应位置上的字符都相同时,两个串才相等。

    int EqualStr(Str *r1,Str *r2){
    	printf("\n\t\t r1=%s  r2=%s\n",r1->vec,r2->vec);
    	int i=0;
    	while(r1->vec[i]==r2->vec[i]&&r1->vec[i]!='\0'&&r2->vec[i]!='\0')
    		i++;
    	if(r1->vec[i]==r2->vec[i])
    		return 0;
    	else if(r1->vec[i]>r2->vec[i])
    		return 1;
    	else
    		return -1;
    
    }
    

    测试代码如下:

    else if(choice=='7'){
    			printf("\n\t\t请输入第一个串: ");
    			gets(c.vec);
    			printf("\n\t\t请输入第二个串: ");
    			gets(d.vec);
    			int k=EqualStr(&c,&d);
    			if(k>0){
    				printf("\n\t\t第一个串大! \n");
    			}else if(k<0){
    				printf("\n\t\t第二个串大! \n");
    			}else {
    				printf("\n\t\t两个串一样大! \n");
    			}
    
    		}
    

    测试结果:

    这里写图片描述

    (5) 插入子串
    在字符串r中的指定位置i插入子串r1。

    Str *InsStr(Str *r,Str *r1,int i){
    	printf("\n\t\t r=%s  r1=%s\n",r->vec,r1->vec);
    	if(i>r->len||r->len+r1->len>MAXLEN){
    		printf("不能插入!");
    	}else{
    
    		for(int k=r->len-1;k>=i;k--){
    			r->vec[r1->len+k]=r->vec[k];//后移空出的位置
    		}
    		for(int k=0;k<r1->len;k++){
    			r->vec[i+k]=r1->vec[k];//插入子串
    		}
    		r->len=r->len+r1->len;
    		r->vec[r->len]='\0';
    	}
    
    	printf("\n\t\t 插入后的新串 r=%s \n",r->vec);
    	return r;
    }
    

    测试代码如下:

    else if(choice=='5'){
    			printf("\n\t\t请输入在第几个字符前插入: ");
    			scanf("%d",&i);
    			getchar();
    			printf("\n\t\t请输入所要插入的字符串: ");
    			r1=CreateStr(&b);
    			Str *newStr=InsStr(r,r1,i-1);
    			printf("\n\t\t新串值为: ");
    			puts(newStr->vec);
    
    		}
    

    测试结果:

    这里写图片描述

    (6) 删除子串
    在给定的字符串r中删除从指定位置i开始连续的j个字符。

    
    void DelStr(Str *r,int i ,int j){
    
    	if(i+j-1>r->len){
    		printf("所要删除的字符串越界!");
    	}else{
    		for(int k=i+j;k<r->len;k++,i++){
    			r->vec[i]=r->vec[k];//将后面的字符串前移覆盖
    		}
    		r->len=r->len-j;
    		r->vec[r->len]='\0';
    	}
    	printf("\n\t\t 删除后的新串 r=%s \n",r->vec);
    
    }
    

    测试代码如下:

    else if(choice=='4'){
    			printf("\n\t\t请输入从第几个字符开始: ");
    			scanf("%d",&i);
    			getchar();
    			printf("\n\t\t请输入删除的连续字符数: ");
    			scanf("%d",&j);
    			getchar();
    			DelStr(r,i ,j);
    
    
    		}
    

    测试结果

    这里写图片描述

    (7) 查找子串

    int IndexStr(Str *r,Str *r1){
    	printf("\n\t\t r=%s  r1=%s\n",r->vec,r1->vec);
    	int i,j,k;
    	for(i=0;r->vec[i];i++){
    		for(j=i,k=0;r->vec[j]==r1->vec[k];j++,k++){
    			if(!r1->vec[k+1]){
    				return i;
    			}
    			return -1;
    		}
    	}
    }
    

    测试代码如下:

    else if(choice=='6'){
    			printf("\n\t\t请输入所要查找的字符串: ");
    			r1=CreateStr(&b);
    			i=IndexStr(r,r1);
    			if(i!=-1){
    				printf("\n\t\t第一次出现的位置是第%d个.\n ",i+1);
    			}else{
    				printf("\n\t\t该子串不在其中!");
    			}
    
    		
    

    测试结果:

    这里写图片描述

    7、串子系统完整代码

    #include<iostream>
    using namespace std;
    #define MAXLEN 100//定义窜的最大长度
    
    typedef struct
    {
    	char vec[MAXLEN];
    	int len;//串的实际长度
    } Str;//可用Str来定义该类型的结构体变量
    
    int LenStr(Str *r){
    
    	int i=0;
    	while(r->vec[i]!='\0'){
    		i++;
    	}
    
    	return i;
    }
    Str *CreateStr(Str *r){
    	gets(r->vec);
    	r->len=LenStr(r);
    	return r;
    }
    
    void ShowStr(Str *r){
    	printf("\n\t\t该串值为: ");
    	if(r->vec[0]=='\0'){
    		printf("空串! \n");
    	}else{
    		puts(r->vec);//使用puts函数输出字符串,格式为 puts(字符串组名)
    	}
    }
    
    void ConcatStr(Str *r1,Str *r2){
    	int i;
    	printf("\n\t\t r1=%s  r2=%s\n",r1->vec,r2->vec);
    	if(r1->len+r2->len>MAXLEN){
    		printf("两个串太长,溢出! ");//连接后的串长超过串的最大长度
    	}else{
    		for( i=0;i<r2->len;i++){
    			r1->vec[r1->len+i]=r2->vec[i];//进行连接
    		}
    		r1->vec[r1->len+i]='\0';
    		r1->len=r1->len+r2->len;//修改连接后的新串的长度
    	}
    	printf("\n\t\t r1=%s  r2=%s\n",r1->vec,r2->vec);
    
    }
    
    void SubStr(Str *r,Str *r1,int i ,int j){
    
    	if(i+j-1>MAXLEN){
    		printf("子串越界! ");
    	}else{
    		for(int k=0;k<j;k++){
    			r1->vec[k]=r->vec[i+k-1];//从r中取出子串
    		}
    
    		r1->len=j;
    		r1->vec[r1->len]='\0';
    	}
    
    	printf("\n\t\t 取出字符为r1=%s ",r1->vec);
    }
    
    int EqualStr(Str *r1,Str *r2){
    	printf("\n\t\t r1=%s  r2=%s\n",r1->vec,r2->vec);
    	int i=0;
    	while(r1->vec[i]==r2->vec[i]&&r1->vec[i]!='\0'&&r2->vec[i]!='\0')
    		i++;
    	if(r1->vec[i]==r2->vec[i])
    		return 0;
    	else if(r1->vec[i]>r2->vec[i])
    		return 1;
    	else
    		return -1;
    
    }
    
    Str *InsStr(Str *r,Str *r1,int i){
    	printf("\n\t\t r=%s  r1=%s\n",r->vec,r1->vec);
    	if(i>r->len||r->len+r1->len>MAXLEN){
    		printf("不能插入!");
    	}else{
    
    		for(int k=r->len-1;k>=i;k--){
    			r->vec[r1->len+k]=r->vec[k];//后移空出的位置
    		}
    		for(int k=0;k<r1->len;k++){
    			r->vec[i+k]=r1->vec[k];//插入子串
    		}
    		r->len=r->len+r1->len;
    		r->vec[r->len]='\0';
    	}
    
    	printf("\n\t\t 插入后的新串 r=%s \n",r->vec);
    	return r;
    }
    
    void DelStr(Str *r,int i ,int j){
    
    	if(i+j-1>r->len){
    		printf("所要删除的字符串越界!");
    	}else{
    		for(int k=i+j;k<r->len;k++,i++){
    			r->vec[i]=r->vec[k];//将后面的字符串前移覆盖
    		}
    		r->len=r->len-j;
    		r->vec[r->len]='\0';
    	}
    	printf("\n\t\t 删除后的新串 r=%s \n",r->vec);
    
    }
    
    int IndexStr(Str *r,Str *r1){
    	printf("\n\t\t r=%s  r1=%s\n",r->vec,r1->vec);
    	int i,j,k;
    	for(i=0;r->vec[i];i++){
    		for(j=i,k=0;r->vec[j]==r1->vec[k];j++,k++){
    			if(!r1->vec[k+1]){
    				return i;
    			}
    			return -1;
    		}
    	}
    }
    
    int main()
    {
    
    	Str a,b,c,d;
    	Str *r=&a,*r1;
    	r->vec[0]='\0';
    	char choice,p;
    	int i,j, ch=1;
    	while(ch!=0){
    		printf("\n");
    		printf("\n\t\t        串子系统                  *");
    		printf("\n\t\t************************************");
    		printf("\n\t\t*   1------输入字符串      *");
    		printf("\n\t\t*   2------连接字符串      *");
    		printf("\n\t\t*   3------取出子串      *");
    		printf("\n\t\t*   4------删除子串      *");
    		printf("\n\t\t*   5------插入子串      *");
    		printf("\n\t\t*   6------查找子串      *");
    		printf("\n\t\t*   7------比较串大小      *");
    		printf("\n\t\t*   8------显示字符串      *");
    		printf("\n\t\t*   0------返      回      *");
    		printf("\n\t\t************************************");
    		printf("\n\t\t请选择菜单号(0-8):    *");
    		scanf("%c",&choice);
    		getchar();
    		if(choice=='1'){
    			printf("\n\t\t请输入一个字符串: ");
    			gets(r->vec);//使用get函数输入字符串 格式为 gets(字符串组名)
    			r->len=LenStr(r);
    		}else if(choice=='2'){
    			printf("\n\t\t请输入所要连接字符串: ");
    			r1=CreateStr(&b);
    			printf("\n\t\tr1为: ");
    			puts(r1->vec);
    			ConcatStr(r,r1);
    			printf("\n\t\t连接后的新串值为: ");
    			puts(r->vec);
    			int n=LenStr(r);
    			printf("新串长度为:%d",n);
    
    		}else if(choice=='3'){
    			printf("\n\t\t请输入从第几个字符开始: ");
    			scanf("%d",&i);
    			getchar();
    			printf("\n\t\t请输入取出的连续字符数: ");
    			scanf("%d",&j);
    			getchar();
    			SubStr(r,&a,i ,j);
    
    
    		}else if(choice=='4'){
    			printf("\n\t\t请输入从第几个字符开始: ");
    			scanf("%d",&i);
    			getchar();
    			printf("\n\t\t请输入删除的连续字符数: ");
    			scanf("%d",&j);
    			getchar();
    			DelStr(r,i ,j);
    
    
    		}else if(choice=='5'){
    			printf("\n\t\t请输入在第几个字符前插入: ");
    			scanf("%d",&i);
    			getchar();
    			printf("\n\t\t请输入所要插入的字符串: ");
    			r1=CreateStr(&b);
    			Str *newStr=InsStr(r,r1,i-1);
    			printf("\n\t\t新串值为: ");
    			puts(newStr->vec);
    
    		}else if(choice=='6'){
    			printf("\n\t\t请输入所要查找的字符串: ");
    			r1=CreateStr(&b);
    			i=IndexStr(r,r1);
    			if(i!=-1){
    				printf("\n\t\t第一次出现的位置是第%d个.\n ",i+1);
    			}else{
    				printf("\n\t\t该子串不在其中!");
    			}
    
    		}else if(choice=='7'){
    			printf("\n\t\t请输入第一个串: ");
    			gets(c.vec);
    			printf("\n\t\t请输入第二个串: ");
    			gets(d.vec);
    			int k=EqualStr(&c,&d);
    			if(k>0){
    				printf("\n\t\t第一个串大! \n");
    			}else if(k<0){
    				printf("\n\t\t第二个串大! \n");
    			}else {
    				printf("\n\t\t两个串一样大! \n");
    			}
    
    		}else if(choice=='8'){
    			ShowStr(r);
    			int n=LenStr(r);
    			printf("串长度为:%d",n);
    		}else if(choice=='0'){
    			break;
    		}else{
    			printf("\n\t\t请注意:输入有误! \n");
    			if(choice!='X'&&choice!='x'){
    				printf("\n\t\t按回车键继续,按任意键返回主菜单 \n");
    				p=getchar();
    				if(p!='\xA'){
    
    					getchar();
    					break;
    				}
    			}
    		}
    	}
    
    	return 0;
    }
    
    
    
    

    效果图:

    这里写图片描述
    Flutter电商实战项目:https://github.com/dechengyang/ydc_flutter_app

    展开全文
  • 数据 数据是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑...数据元素用于完整地描述一个对象,如一名学生记录,树中棋盘的一个格局(状态...

    数据

    数据是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串,多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。

    数据元素

    数据元素是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。在有些情况下,数据元素也称为元素、记录等。数据元素用于完整地描述一个对象,如一名学生记录,树中棋盘的一个格局(状态),以及图中的一个顶点等。

    数据项

    数据项是组成数据元素的、有独立含义的、不可分割的最小单位。例如,学生基本信息表中的学号、姓名、性别等都是数据项。

    数据对象

    数据对象是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可以是一个数据对象。由此可以看出,不论数据元素集合是无限集(如整数集),或是有限集(如字母字符集),还是由多个数据项组成的复合数据元素(如学生表)的集合,只要集合内元素的性质均相同,都可称之为一个数据对象。

    展开全文
  • 1-2:数据类型之元组、列表类型

    千次阅读 2020-12-05 18:46:19
    元组的概念:前面我们学过数字类型,字符类型,它们都代表一个元素!1.元组是包含多个元素的类型,元素之间用逗号分隔。t1 = 123,456,"hello"2.元组可以使空的,t2 = ()3.元组包含一个元素: t3 = 123,4.元组外层...
  • 我们时常遇到一样一个情况,手动输入一个字符,但你需要将字符内的各个元素逐一取出使用,亦或只取其中几位,这些元素可能是数字也可能是字母。之前我就卡在,手动输入一定得用字符接收,总不能用数组吧,数组...
  • 字符各种数据类型

    千次阅读 2015-07-31 19:12:29
    第一大类:整数数据 bit:bit数据类型代表0,1或NULL,就是表示true,false.占用1byte. int:以4个字节来存储正负数.可存储范围为:-2^31至2^31-1. smallint:以2个字节来存储正负数.存储范围为:-2^15至2^15-1 tinyint: 是...
  • 数据结构 - 线性表、栈、队列、

    千次阅读 多人点赞 2018-09-24 18:01:47
    最近把之前学过的数据结构和算法部分都重新研究看完了,整理分享一下。 前言感想:之前遇到有人说不要说重复的东西,网上都有了,书里都有这些概念了。我听到之后很诧异,很感叹这个人或者这些人可能没有真正的去...
  • 数据结构学习之路——————

    千次阅读 2018-07-27 19:49:21
    1.类型的定义 (string)(或字符)是由零个或多个字符组成的有限序列,一般记为    n称为的长度。零个字符的称为空串,长度为0。中任意个连续字符组成的子序列称为该的子串。包含子串的相应地...
  • 一、数据、数据元素、数据对象、数据结构的定义 1、数据的定义 定义一:数据是客观事物的符号表示。 学号 姓名 语文 数学 C语言 6201001 张三 85 54 ...
  • 数据结构之(上)——的基本概念与存储结构 1.什么是 (1)我们先来看一下基本的关系: 数据结构是指两个集合:a.有特定关系的元素的集合(元素集) b.这些元素之间的关系的集合(关系集) 元素之间的关系有...
  • 把列表中的元素类型转换成字符

    千次阅读 2020-03-31 13:41:38
    a列表中的元素都是列表,如果想要把a列表中的元素拼接到一起,首先要把a列表中的元素都变成字符,然后使用join函数拼接元素。 a = [[1,2],[2,3],[3,4]] b = [] for i in range(len(a)): b.append(str(a[i])) 把b...
  • 不能存在相同的元素,但是如果其中的某一个元素是可以被改变的,它一旦改变之后可能会和其他的元素相同,这样子的话集合类型就会出现错误,所以集合类型要求,该元素不能是可变数据类型 不可变数据类型有哪些? 整数...
  • 数据结构中的

    千次阅读 2018-12-08 12:10:20
    C语言中有个字符数据结构中有个,联系是二者都是存储字符的,区别在于前者我们直接定义数组存储,以\0结尾,如 char str[size]; 而后者我们是把字符看成一个线性表,定义成结构体形式,结尾用length控制...
  • 数据结构之的基本操作的实现(c语言)

    万次阅读 多人点赞 2018-01-21 17:01:26
    字符(简称),可以将其看作是种特殊的线性表,其特殊性在于线性表的数据元素的类型总是字符性,字符的数据对象约束为字符集。 是由0个或多个字符组成的有限序列。一般记作:s = “s1 s2 s3 …. sn”,,...
  • 什么是数据结构?

    千次阅读 2019-06-19 20:25:39
    什么是数据结构?数据结构是什么? 数据结构是计算机存储、组织数据的方式...数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。也就是说,数组结构指的是数据集合及...
  • Js动态HTML字符拼接法加载数据

    千次阅读 2018-12-01 13:20:21
    有时候前端请求获取到了数据,比如是一个要显示的表格数据。 js动态加载显示方法有两种。 1. 动态创建元素,配置属性,加入母元素标签(编码量多) 2. HTML字符拼接,替换为母元素innerHTML(高效) 方法 方法一...
  • 即字符,是由0或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。 从数据结构上来说是一种特殊的线性表,其特殊性在于中的数据元素是一个个的字符。但是,的基本操作和线性表的基本操作相比...
  • 字符数组添加元素

    千次阅读 2015-07-13 15:16:59
    str="1,2,6"; string[] al= str.Split(','); Liststring> r = new Liststring>(al); r.Add("3");
  • 把numpy数组元素变为字符的方法

    千次阅读 2020-03-19 00:55:40
    我想插入字符,但即使通过dtype参数把数组变为str类型了,还是达不到我的要求,只能插入该字符的首字符。 解决方法如下: 使用test_new_col = ["%f" % x for x in test_col]完美解决这个问题。 成功达到目的: ...
  • 如果是json字符本质上还是字符只能用string的api,需要先转为json对象,利用push方法添加元素。 示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>...
  • 数据结构考研学习笔记(七)---

    万次阅读 2020-05-17 20:52:16
    串1. 串的定义和实现1.1 串...我们常见的信息检索系统、文本编辑程序、问答系统、自然语言翻译系统等,都是以字符串数据作为处理对象的。 1.1 串的定义 串是由零个或者多个字符组成的有限序列。一般记为S = ‘a1a2a3a4
  • java 数组中插入新的元素

    千次阅读 2021-02-26 10:06:34
    class Demo1{public static void main(String[] args){/*5....//这是按照字母顺序排好序的 字符数组现在要往里面插入新的英文歌曲,按照首字母排序插入到指定的位置提示: musics[i].compareTo...
  • s='123254321' #将第4个2替换成4 i,j=3,'4' string=list(s) #字符转列表 string[i]=j #列表替换元素 z=''.join(string) #列表转字符 print(z)
  • 字符 https://ww2.mathworks.cn/help/matlab/characters-and-strings.html 创建字符向量 通过将字符序列括在单引号中来创建一个字符向量。 chr = 'Hello, world' chr = 'Hello, world' 字符向量为 char 类型的...
  • Python字符串元素的访问与截取

    万次阅读 2018-11-23 20:55:41
    得到Python的各种序列后,接下里就要知晓如何访问或取出序列中的数据。看着很简单,但是随着所学的序列越来越多后,比如字符、列表、元组、字典、一维数组、多维数组、Series、DataFrame,渐渐的脑子就会混乱,...
  • Python 将列表中的元素转化为字符

    万次阅读 多人点赞 2019-07-02 16:38:37
    colors = ['red', 'blue', 'yellow', 12, 3.14] str1 = str(colors)[1:-1] ...这种方式,会将每一个元素拼到字符中,从另一个角度看,他只是把中括号替换成了引号。 colors = ['red', 'blue', 'yellow'...
  • 最近在复习数据结构,所以想把平时上课做的习题做个总结,如果大家有遇到这方面的问题就可以参考一下了,废话不多说,直接开始吧。 1、单选题 S1=“ABCD”,S2=“CD”则S2在S1中的位置是(D ) A.1 B.4 C.2 D.3 2、...
  • 而后又将数据先排序,并设置条件判断,但这样越到后面处理速度会越慢,因为是从头开始遍历,当遇到没有的元素时,就会遍历一遍全部数据,这样的花销太大了。 如下所示,因为排了序,所以相关的数据一定是在某个区间...
  • 位(Bit):"位(bit)"是电子计算机中最小的数据单位。每一位的状态只能是0或1。  字节(Byte):8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 965,783
精华内容 386,313
关键字:

串要求数据元素必须是