数据结构c语言的串函数 数据结构串的主函数

C语言关于字符串的操作函数有哪些string.h头文件中包含的字符串函数
void *memcpy(void *dest, const void *src, size_t n);//将n字节长的内容从一个内存地址复制到另一个地址;如果两个地址存在重叠,则最终行为未定义
void *memmove(void *dest, const void *src, size_t n);//将n字节长的内容从一个内存地址复制到另一个地址;与memcpy不同的是它可以正确作用于两个存在重叠的地址
void *memchr(const void *s, char c, size_t n);//在从s开始的n个字节内查找c第一次出现的地址并返回,若未找到则返回NULL
int memcmp(const void *s1, const void *s2, size_t n);//对从两个内存地址开始的n个字符进行比较
void *memset(void *, int, size_t);//用某种字节内容覆写一段内存空间
char *strcat(char *dest, const char *src);//在字符串dest之后连接上src
char *strncat(char *dest, const char *src, size_t n);//从src截取n个字符连接在字符串dest之后,返回dest字符串
char *strchr(const char* str, int ch);//从字符串str头开始查找字符ch首次出现的位置
char *strrchr(const char* str,int ch);//从字符串str尾开始查找字符ch首次出现的位置
int strcmp(const char *, const char *);//基于字典顺序比较两个字符串
int strncmp(const char *, const char *, size_t);//基于字典顺序比较两个字符串 , 最多比较n个字节
int strcoll(const char *, const char *);//基于当前区域设置的字符顺序比较两个字符串
char *strcpy(char* str1, const char* str2);//将str2拷贝给str1
char *strncpy(char* str1, const char* str2, size_t n);//截取str2的n个字符拷贝给str1
char *strerror(int);//返回错误码对应的解释字符串,参见errno.h(非线程安全函数)
size_t strlen(const char *);//返回一个字符串的长度
size_t strspn(const char *s, const char *strCharSet);//从字符串s的起始处开始,寻找第一个不出现在strCharSet中的字符,返回其位置索引值 。换句话说,返回从字符串s的起始位置的完全由strCharSet中的字符构成的子串的最大长度 。strspn为string span的缩写 。不支持多字节字符集 。
size_t strcspn(const char *s, const char *strCharSet);//从字符串s的起始处开始,寻找第一个出现在strCharSet中的字符,返回其位置索引值 。换句话说,返回从字符串s的起始位置的完全由不属于strCharSet中的字符构成的子串的最大长度 。strcspn为string complement span的缩写 。不支持多字节字符集 。
char *strpbrk(const char *s, const char *strCharSet);//在字符串s中查找strCharSet中任意字符第一次出现的位置的指针值 。strpbrk为string pointer break缩写 。不支持多字节字符集 。
char *strstr(const char *haystack, const char *needle);//在字符串haystack中查找字符串needle第一次出现的位置,heystack的长度必须长于needle
char *strtok(char *strToken, const char *strDelimit );//将一个字符串strToken依据分界符(delimiter)分隔成一系列字符串 。此函数非线程安全,且不可重入;但MSVC实现时使用了thread-local static variable因而是线程安全的单仍然是不可重入,即在单线程中不能对两个源字符串交替调用该函数来分析token,应当对一个字符串分析完成后再处理别的字符串 。
size_t strxfrm(char *dest, const char *src, size_t n);//根据当前locale转换一个字符串为strcmp使用的内部格式
求解数据结构c语言中串的问题(如果I和m之间只有一个'号,没有空格的话)
长度应该为13
SubString(s1,8,5)的结果是tuden,(意思是说从第8个字符开始,拿出5个字符)
index(s1,'u')的功能是在字符串中s1查找目的字符u,如果找到了 , 就返回u的位置值 , 没有找到就返回0 。s1中有u这个字符,位置为9,所以结果为9
Replace(s1,’stidemt’,s3) 格式有问题;
replace(s,start,t,v),即要求在主串s中,从位置start,开始查找是否存在子串t,若主串s中存在子串t,则用子串v替换子串t 且函数返回1,若主串s中不存在子串t,则函数返回0.
数据结构用C语言写的串怎么写主函数/*
串a:
abcdefghijklmnopqrstuvwxyz
串b:
01234567890123456789
串a:
abcdefghijklmnopqrstuv012345678901234567
串c:
abcdefghijklmnopqrstuvwxyz
Press any key to continue
*/
#include stdio.h
#define MAXLEN 40
typedef struct {
char ch[MAXLEN];
int len;
}SString;
void StrInsert(SString *s,int pos,SString t) {
int i;
if(pos0 ) pos = 0;
if(poss-len - 1) pos = s-len;
if(s-lent.len = MAXLEN) { // 长度适中
for(i = s-lent.len - 1;ipos;i--)
s-ch[i] = s-ch[i - t.len];
for(i = 0;it.len;i) s-ch[ipos] = t.ch[i];
s-len= t.len;
}
else if(post.lenMAXLEN) { // 长度超限1,从pos后不再有s的内容
for(i = pos;iMAXLEN;i)
s-ch[i] = t.ch[i - pos];
s-len = MAXLEN;
}
else { // 长度超限2,从post.len后还有s的部分内容
for(i = MAXLEN - 1; i = post.len; --i)
s-ch[i] = s-ch[i - t.len];
for(i = 0; it.len;i)
s-ch[ipos] = t.ch[i];
s-len = MAXLEN;
}
}
// 在s中从pos位置开始删除len个字符
int StrDelete(SString *s,int pos,int len) {
int i;
if(pos0 || poss-len) return 0;
if(poslens-len) { // 删除s的中间部分
for(i = pos;iposlen;i)
s-ch[i] = s-ch[ilen];
s-len -= len;
}
else { // len太大
s-len = pos;
}
return 1;
}
SString StrCopy(SString *s,SString t) {
int i;
for(i = 0;it.len;i) s-ch[i] = t.ch[i];
s-len = t.len;
return *s;
}
int StrEmpty(SString s) {
if(s.len == 0) return 1;
return 0;
}
int SteCompare(SString s,SString t) {
int i;
for(i = 0;is.lenit.len;i)
if(s.ch[i] != t.ch[i]) return (s.ch[i] - t.ch[i]);
return (s.len - t.len);
}
int SteLength(SString s) {
return s.len;
}
void StrClear(SString s) {
s.len = 0;
}
void StrShow(const SString s) {
int i;
for(i = 0; is.len;i)
printf("%c",s.ch[i]);
printf("\n");
}
int main() {
SString stra = {"abcdefghijklmnopqrstuvwxyz",26};
SString strb = {"01234567890123456789",20},strc;
StrCopy(strc,stra);
printf("串a:\n");
StrShow(stra);
printf("串b:\n");
StrShow(strb);
StrInsert(stra,22,strb); //
printf("串a:\n");
StrShow(stra);
printf("串c:\n");
StrShow(strc);
return 0;
}
c语言字符串函数有哪些复制相关函数:memcpy、memmove、strcpy、strncpy
字符串连接函数:strcat、strncat
字符串比较函数:memcmp、strcmp、strcoll、strncmp、strxfrm、
查找函数:memchr、strchr、strcspn、strpbrk、strrchr、strspn、strstr、strtok
其他相关函数:memset、strerror、strlen
数据结构:串的基本演示操作 题目:如果语言没有把串作为一个预先定义好的基本类型对待,又需要用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型 。试实现串类型,并写一个串的基本操作演示系统 。
在教科书4.2.2节用堆分配储存表示实现HString串类型的最小操作子集的基础上,实现串抽象数据类型的其余基本操作(不使用C语言本身提供的串函数) 。参数合法检查必须严格 。
利用上述基本操作函数构造以下系统:它是一个命令解释程序 , 循环往复地处理用户键入的每一条命令,直到终止程序的命令为止 。
(1)赋值 。格式:A ? 串标识? 回车
用串标识所表示的串的值建立新串,并显示新串的内部名和串值 。例:A ‘Hi!’
(2)判相等 。格式E? 串标识1?串标识2? 回车
若两串相等 , 则显示“EQUAl”,否则显示“UNEQUAL” 。
(3)联接 。格式:C ? 串标识1?串标识2?回车
将两串拼接产生结果串,他的内部名和串值都显示出来 。
(4)求长度 。格式:L?串标识 ?回车
【数据结构c语言的串函数 数据结构串的主函数】 显示串的长度 。
(5)求子串 。格式:S?串标识?数1?数2?回车
如果参数合法,则显示子串的内部名和串值 。数不带正负号 。
(6)子串定位 。格式:I? 串标识1? 串标识2?回车
显示第二个串在第一个串中首先出现的起始位置 。
(7)串替换 。格式:R ? 串标识1?串标识2?串标识3 ? 回车
将第一个串中所有出现的第二个串用第三个串替换 。
(8)显示 。格式:P?回车
显示所有在系统中被保持的串的内部名和串值的对照表 。
(9)删除 。格式:D? 内部名? 回车
删除该内部名对应的串,即赋值的逆操作 。
(10)退出 。格式:Q ?回车
结束程序的运行 。
在上述命令中,如果一个自变量是串,则应首先建立它 。基本操作函数的结果(即函数值)如果是一个串 , 则应在尚未分配的区域新辟空间存放 。
(1)E ‘’ ‘’回车,应显示“EQUAL”
(2)E ‘abc’ ‘abcd’ 回车,应显示“UNQUAL”
(3)C ‘’ ‘’回车,应显示‘’
(4)I ‘a’ ‘’回车,应报告:参数非法
(5)R ‘aaa’ ‘aa’ ‘b’ 回车,应显示‘ba’
(6)R ‘aaabc’ ‘a’ ‘aab’ 回车 , 应显示‘aabaabaabbc’
(7)R ‘aaaaaaaa’ ‘aaaa’ ‘ab’ 回车,应显示‘abab’
串的抽象数据类型结构:
ADT String{
数据对象: D={ai| ai∈charcaterset,i=1,2,…,n,n=0}
数据关系: R1={ai-1,ai|ai-1,ai∈D, i=1,2,…,n}
基本操作:
Assign( T , chars )
初始条件:chars是字符串常量 。
操作结果:生成一个其值等于chars的串T 。
StrCompare( S ,T )
初始条件:S和T是已存在 。
操作结果:比较其值,若ST,返回值0,若S=T , 返回值=0,若ST,返回值0 。
StrLength( S )
初始条件:S是已存在 。
操作结果:返回该串的长度 。
ClearString ( S )
初始条件:S是已存在 。
操作结果:将串S清为空串 。
Concat( T ,S1 ,S2 )
初始条件:S1和S2是已存在 。
操作结果:由S1和S2联接成新串T 。
SubString( Sub ,S,int pos ,int len )
初始条件:S是已存在,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos 1 。
操作结果:用Sub返回串的第pos个字符起长度为len的子串 。
Index( S , T ,pos )
初始条件:S和T已存在,T是非空串,1≤Spos≤StrLength(S) 。
操作结果:若主串S中存在和串T相同的子串 , 则返回它在主串中第pos个字符之后第一次出现的位置;否则返回函数值为0 。
Replace( S , T , V )
初始条件:串S,T和V存在,T是非空串 。
操作结果:用V替换主串S中出现的所有和T相同的不重叠的子串 。
}ADT String
int StrAssign(HString *T, char *chars)
操作结果:生成值等于chars的串T
int InitHString(HString *T)
操作结果:初始化串T
int StrLength(HString S)
操作结果:返回串S的长度
int StrCompare(HString S, HString T)
操作结果:比较串S和串T,若ST,则返回值0;若S=T,则返回值=0;若ST,则返回值0
int ClearString(HString *S)
操作结果:将串S清为空串 , 并释放S所占空间
int Concat(HString *T, HString S1, HString S2)
操作结果:用T返回由S1和S2联接而成的新串
int SubString(HString *Sub, HString S, int pos, int len)
操作结果:返回串S的第pos个字符起长度为len的子串
int Index(HString S, HString T, int pos)
操作结果:若主串S中第pos个字符之后存在与T相等的子串,则返回第一个这样的子串在S中的位置,否则返回0
int Replace(HString *S1, HString S2, HString S3)
操作结果:用S3替换S1中所有出现的与S2相等的不重叠的子串
int InitResultType(ResultType *R)
操作结果:初始化命令分析结果
int InitStrHeadList(StrHeadList *L)
操作结果:初始化串头表
int CmdAnalyse(ResultType *R, char str[], StrHeadList *L)
操作结果:命令分析函数,把命令分析结果通过R返回
int ShowHString(HString S)
操作结果:打印串内容
int CmdOpretor(ResultType R, StrHeadList *L)
操作结果:根据命令分析结果对串进行相应操作
串的堆分配储存表示:
演示系统的主结构是一个串头表 , 各串的头指针依次存于串头数组StrHead中(设串的数目不超过100),CurNum为系统中现有的串的数目,CurNum是可为下一个串头指针分配的位置,StrHead的元素下标作为对应串的内部名,定义为:
命令分析结果的储存结构如下 ,
赋值、求长度、求子串、子串定位、联接、子串定位、替换等操作的实现
跳过空格依次读入命令符和参数 , 根据字符串标识判断是否为字符串,因为只有求子串操作需要数值部分参数,因此可以据此来区分参数是否为数值或是串内部名 。
根据不同操作需求,判断参数合法性
根据命令行分析函数结果判断参数是否合法
4.输入Q回车退出
(1)E ‘’ ‘’回车,应显示“EQUAL”
(2)E ‘abc’ ‘abcd’ 回车,应显示“UNQUAL”
(3)C ‘’ ‘’回车,应显示‘’
(4)I ‘a’ ‘’回车,应报告:参数非法
(5)R ‘aaa’ ‘aa’ ‘b’ 回车,应显示‘ba’
(6)R ‘aaabc’ ‘a’ ‘aab’ 回车 , 应显示‘aabaabaabbc’
关于数据结构c语言的串函数和数据结构串的主函数的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读