#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXLEN 10
typedef struct
{
char ch[MAXLEN];
int len;//串中最后一个字符所在下标
}Str;
int strInsert(Str* s,int pos,Str* t)
{
int i;
if(pos<0||pos>s->len)
return 0;
if(s->len+t->len+1<MAXLEN)//插入后串长小于MAXLEN
{
for(i=s->len+t->len+1;i>t->len+pos;i--)
s->ch[i] = s->ch[i-t->len-1];
for(i=0;i<=t->len;i++)
s->ch[pos+i] = t->ch[i];
s->len = s->len+t->len+1;
}
else
{
if(pos+t->len+1<MAXLEN)
{//插入后串长大于MAXLEN,但串t可以全部插入
for(i=MAXLEN-1;i>t->len+pos;i--)
{
s->ch[i] = s->ch[i-t->len-1];
}
for(i=0;i<=t->len;i++)
s->ch[pos+i] = t->ch[i];
s->len = MAXLEN-1;
}
else
{
for(i=0;i<MAXLEN-pos;i++)
{
s->ch[i+pos] =t->ch[i];
}
s->len=MAXLEN-1;
}
}
return 1;
}
int strDelete(Str*s,int pos,int len)
{//在串中删除序号为pos起长度为len个字符
int i;
if(pos<0||pos>(s->len-len))
return 0;
for(i=pos+len;i<=s->len;i++)
s->ch[i-len] = s->ch[i];
s->len-=len;
return 1;
}
/*串拷贝
*/
void strCopy(Str* s,Str* t)
{
int i;
for(i = 0;i<=t->len;i++)
{
s->ch[i] = t->ch[i];
}
s->len = t->len;
}
/*串比较函数*/
int strCompare(Str s,Str 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);
}
/*串连接函数*/
int strCat(Str *s,Str t)
{
int i ,flag = 0;
if(s->len+t.len+1<MAXLEN)
{
for(i = 0;i<=t.len;i++)
s->ch[s->len+1+i] = t.ch[i];
s->len = s->len+t.len+1;
flag = 1;
}
else if(s->len+1<MAXLEN)
{
for(i=s->len+1;i<MAXLEN;i++)
s->ch[i] = t.ch[i-s->len-1];
s->len = MAXLEN-1;
}
return flag;//flag为一为全部连接否则是部分连接或无法连接
}
/*求子串函数*/
int subString(Str s,Str *sub,int pos,int len)
{
int i;
if(pos<0||pos>s.len||pos+len>s.len||len<1)
{
sub->len = 0;
return 0;
}
for(i = 0;i<len;i++)
sub->ch[i] = s.ch[pos+i];
sub->len = len-1;
return 1;
}
/*定位函数*/
int strIndex(Str*s,int pos,Str t)
{
int i=pos,j=0;
while(i<=s->len&&j<=t.len)
{
if(!(s->ch[i]-t.ch[j]))
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>t.len)
return i-j;
return 0;
}
void scan(Str* t)
{
printf("请输入\n");
scanf("%s",t->ch);
t->len = strlen(t->ch)-1;
}
void print(Str *t)
{
int i ;
for (i = 0;i<=t->len;i++)
printf("%c",t->ch[i]);
}
int main(void)
{
Str t;
Str * s = (Str*) malloc(sizeof(Str));
//scan(s);
scan(&t);
//int i = strIndex(s,2,t);
//strInsert(s,2,&t);
//subString(*s,&t,2,3);
//strCat(s,t);
//int i = strCompare(*s,t);
//strDelete(s,2,3);
strCopy(s,&t);
//printf("%d",i);
print(s);
return 0;
}
数据结构_字符串的操作_c/c++
最新推荐文章于 2022-08-27 21:56:29 发布