串 数据结构,数据结构图的总结
Yyds干货库存
一、基本概念字符串:由0个或0个以上字符组成的有序序列,称为字符串,标记为s=abcdefg ,其中s是字符串的名称,a b c是字符串的值,可以是字母、数字或字符。
字符串长度:字符串中元素的数量
空字符串:没有任何字符的字符串,字符串长度为0。
子字符串:由主字符串中任何连续字符组成的字符串。
s1和s2相等的条件:
s1,s2的长度相等,在S1,s2的相应位置的元素处处相等。2.字符串的类型。定长顺序串的定义:用一组地址连续的存储单元来存储字符串值的字符序列,类似于线性表的顺序存储结构。
静态存储分布式代码的实现:
#define MAXLEN 30 //用户可以在255以内定义最大字符串长度typedef struct { Charch[maxlen];int len} SString动态演示:
其实是依次插入的。2.基本算法字符串插入:
Int insert (s string * s,int pos,s string t)/*在字符串s中下标为pos的字符前插入字符串t */{ int I;If (pos 0 pos s- len) /*非法插入位置*/返回0;If (s- len t.len=MAXLEN) /*插入后的字符串长度MAXLEN */{ for(I=s-len t . len-1;i=t.len posI-)s-ch[I]=s-ch[I-t . len];//将插入位置的现有字符移回for(I=0;i t.lens-ch[I pos]=t . ch[I];//在空的位置逐个插入字符串s-len=s-len t . len;} else {if (pos t.len=MAXLEN) /*插入后的字符串长度为MAXLEN,但可以插入字符串t的所有字符序列*/{ for(I=MAXLEN-1;I . t . len pos-1;I-)s-ch[I]=s-ch[I-t . len];//将插入位置的现有字符移回for(I=0;i t.lens-ch[I pos]=t . ch[I];//在空的位置逐个插入字符串s-len=MAXLEN;} else /*插入后字符串长度为MAXLEN,字符串T的部分字符要丢弃*/{ for(I=0;I MAXLEN-pos;s-ch[I pos]=t . ch[I];s-len=MAXLEN;}返回1;}}字符串删除:
Int delete (s string * s,int pos,int len)/*从字符串s */{ int I;If (pos 0 pos (s- len-len)) /*非法删除参数*/返回0;for(I=pos len;s-I)s-ch[I-len]=s-ch[I];/*从pos len向前移动到字符串末尾以删除len字符*/s-len=s-len-len;/*s字符串长度减去len */return 1;}字符串复制:
Voidstrcopy (s string * s,s string t)/*将字符串t的值复制到字符串s */{ int I;for(I=0;i t.lenI)s-ch[I]=t . ch[I];s-len=t . len;}字符串比较:
Int Compare (s string s,s string t)/*如果字符串s和t相等,则返回0;如果s t,则返回正数;如果s t,负数*/{ int I;for(I=0;I s . len I t . len;I)if(s ch[I]!=t . ch[I])return(s . ch[I]-t . ch[I]);//按照字符的字典顺序比较return(s . len-t . len);}字符串连接:
Intrcat (s string * s,s string t)/*将字符串s */{int i,flag后的字符串串联起来;If (s- len t.len=MAXLEN) /*连接后的字符串长度小于MAXLEN */{ for(I=s-I s-len t . len;I)s-ch[I]=t . ch[I-s-len];//t的下标从0开始,s-len=t . len;flag=1;} else {if (s- len MAXLEN) /*串接字符串的长度大于MAXLEN,但字符串s的长度小于MAXLEN,即丢弃串接字符串t的部分字符序列*/{ for(I=s-I MAXLEN;I)s-ch[I]=t . ch[I-s-len];s-len=MAXLEN;flag=0;} else flag=0;/*字符串S的长度等于MAXLEN,字符串T不连通*/return flag;}查找子字符串:
Intsubstring (s string * sub,s string s,int pos,int len)/*将字符串s中的下标pos复制到sub by len characters */{ int I;if(pos 0 pos s . len len 1 len s . len-pos)//当位置或长度非法时{ sub-len=0;返回0;} else { for(I=0;分支机构;子len=len返回1;} }3.Heap heap heap:自由存储区,malloc()实现了存放在一组地址连续的存储单元中的字符串值的字符序列,代码是在程序执行过程中通过动态分配获得的:
typedef结构{ char * ch//如果字符串不为空,根据字符串长度分配存储区域;否则为NULL int length//string length } HString;4.区块链字符串的定义:类似于链表,但是每个节点可以存储多个字符,在末尾加一个尾指针。
代码实现:
#define BLOCK_SIZE 4 //用户可定义的块大小typedef struct BLOCK { charch[BLOCK _ SIZE];结构块* next}块;三。模式匹配的定义:求解子串在主串中第一次出现的位置模式匹配也叫子串的定位操作,由函数StrIndex(S,pos,T)实现,T叫模式串。代码:
Int Strindex (s string s,int pos,s string t)/*从主字符串s的下标pos开始查找字符串t第一次出现的位置,成功返回位置序号,不成功返回-1*/{ int i,j,startif (t.len==0)返回(0);/*当模式字符串为空时,是任意字符串的匹配字符串*/start=pos;I=开始;j=0;/*主字符串从pos开始,模式字符串从开头开始(0)*/while(I s . len J t . len)if(s . ch[I]==t . ch[J]){ I;j;}/*当前对应字符相等时前进*/else { start;/*当前对应字符不相等时回溯*/I=start;j=0;/*主字符串从start 1开始,模式字符串从开头(0)*/} if(j=t . len)return(start);/*匹配成功时,返回匹配起始位置*/else返回(-1);/*匹配不成功时,返回-1 */}演示图:
解析:
设置两个指针I和k,输入目标字符串Hello World!模式串orl如果I指向的值与模式串的第一个元素不一致,指针i j同时向后移动。如果I指向的值与模式字符串的第一个元素一致,指针J只向后移动。如果J指向的元素与模式字符串的后续元素一致,则继续移动,直到搜索完成。如果J指向的元素与模式字符串的后续元素不一致,指针I指向K的位置继续开始。四。总结和提高。在C中,C标准库提供了字符串类类型,支持以上所有。
编程时添加头文件:
#include string //或通用头文件# include bits/stdc . husing namespace STD;String函数:用string定义S类(可以定义任何东西,只要把S改成定义好的字母,在C中调用函数就可以了)。具体使用方法是:
函数用法常用操作s.resize(10)将字符串长度设置为10string s( ABC)将字符串s的值构造为ABCs.empty()确定字符串是否为空s.length()或s.size()求解字符串长度s . begin()start value s . end()end value search(搜索成功返回元素位置,失败-1)s.find(A )查找字符As.find( ABC)查找字符串ABCs.find(A ,2)查找字符As.find( ABCD,1,2)从位置1开始在下标为2的位置插入(2,ABC)。添加字符串ABCs.insert(2,ABC,1),其中下标为2。添加一个s.insert(2,ABCD,2,2)在两个字符s.push_back(A )的末尾添加字符A从下标2的字符串ABCD中的位置2开始替换s.replace(2,4,ABCD)从下标2的位置开始,用ABCD替换四个字符。Delete s.erase(2)删除所有元素s.erase(2,1)删除下标2后的第一个元素反向翻转(s.begin(),s.end())翻转所有字符串,即反向输出复制s1=s.substring(2)从2中提取字符串S到尾部赋给s1s1=s.substring(2,3)从2中提取字符串S并赋三个字符给s1const char*s1=s.data(),将string类变成字符串数组s.copy(s1,2,3)。将S中第三个位置的两个字符复制到s1进行比较(假设原字符串为ABCD)。S. COMPARE (ABCD)相等返回0,大于原字符串返回1。如果小于-1,清空s.assign( ABC)空字符串,设置为ABCs.assign( ABC,2)空字符串,设置为ABC的前两个字符,ABs.assign( ABC,2,1)空字符串,设置为从ABC的2开始的1个字符的s.assign(5, a )空字符串,并设置。
51cto _博客
2022-05-05 10:02
博主您好,减(shan)减(chu)文章中的外部链接可以更好的帮助文章首页或者推荐一下~
mb6221e63cdf332
博主回复51cto_blog
2022-05-05 10:06
博主您好,减(shan)减(chu)文章中的外部链接可以更好的帮助文章首页或者推荐一下~
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。