c语言数据结构串的大小比较好,C语言数据结构里顺序串的有关问题

C/C++ code//可以运行,后一部分没有检查。

#include "stdio.h"

#include "stdlib.h"

#define MAXLEN 100

typedef struct

{

char ch[MAXLEN];

int Len;

}SString;

void StrAsign (SString *S,char *chars)

{

int i=0;

while(chars[i]!='\0')//here

{

S->ch[i]=chars[i];

i++;

}

S->ch[i]='\0';//here

S->Len=i;

}

void StrCopy(SString *S,SString *T)

{

int i;

for(i=0;iLen;i++)

S->ch[i]=T->ch[i];

S->Len=T->Len;

}

int StrLength(SString *S)

{

return(S->Len);

}

int StrCat(SString *S,SString *T)

{

int i,j=0,flag;

if (S->Len+T->Len<=MAXLEN)

{

for(i=S->Len;iLen+T->Len;i++)

S->ch[i]=T->ch[j++];//这里是连接

S->ch[i]='\0';

S->Len+=T->Len;

flag=1;

}

else if (S->Len

{

for(i=S->Len;i

S->ch[i]=T->ch[i-S->Len];

S->Len=MAXLEN;

flag=0;

}

else

flag=0;

return(flag);

}

int SubString(SString *Sub,SString *S,int pos,int len)

{

int j;

if(pos<1||pos>S->Len||len<1||len>S->Len-pos+1)

{

Sub->Len=0;

printf("参数错误!");

return 0;

}

else

{

for(j=0;j

Sub->ch[j]=S->ch[pos+j-1];

Sub->Len=len;

return 1;

}

}

int StrIndex(SString *S,SString *T)

{

int i=0,j=0,k;

while(iLen&&jLen)

{

if (S->ch[i]==T->ch[j])

{

i++;

j++;

}

else

{

i=i-j+1;

j=0;

}

}

if(j>=T->Len)

k=i-T->Len+1;

else

k=-1;

return k;

}

void DispStr(SString *S)

{

int i;

for(i=0;iLen;i++)

printf("%c",S->ch[i]);

}

void main()

{

SString S,T,R,Sub;

int Length,pos,len,loc;

StrAsign(&S,"abcdefgdeg");

printf("\n串S为:");

DispStr(&S);

Length=StrLength(&S);

printf("\n串S的长度为%d",Length);

StrAsign(&T,"deg");

printf("串T为\n");

DispStr(&T);

printf("\n将串T复制给串R,复制后的结果串R为:");

StrCopy(&R,&T);

DispStr(&R);

if(StrCat(&S,&T))

{

printf("\n串S与串T连接后的串S为:");

DispStr(&S);

Length=StrLength(&S);

printf("\n串S的长度为%d:",Length);

}

else

printf("\n串S与串T的连接为成功!");

printf("\n请输入要截取串S的其实位置与截取的长度值分别为:");

scanf("%d %d",&pos,&len);

printf("将串S从第%d个字符开始,将长度为%d的字符序列复制到串Sub中",pos,len);

if(SubString(&Sub,&S,pos,len))

{

printf("\n串Sub为:");

DispStr(&Sub);

Length=StrLength(&Sub);

printf("\n串Sub的长度为%d:",Length);

}

loc=StrIndex(&S,&T);

if(loc==-1)

printf("\n串S与串T匹配失败!");

else

printf("\n串S与串T匹配!匹配位置为%d:",loc);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值