第1关:子串插入
任务描述
本关任务:编写一个将子串插入到主串的第i(i>=1)个位置的函数,当参数错误时返回0,成功插入时返回1。
测试说明
平台会对你编写的代码进行测试:
测试输入:
abcd
123
2
预期输出:
a123bcd
测试输入:
1234567
aaa
9
预期输出:
fail!
代码如下
#include <stdio.h>
#define MaxSize 100 //串中最多字符个数
typedef struct
{ char data[MaxSize]; //存放串字符
int length; //存放串的实际长度
} SqString; //顺序串类型
void Assign(SqString &s,char str[])
{ int i=0;
while (str[i]!='\0') //遍历str的所有字符
{ s.data[i]=str[i];
i++;
}
s.length=i;
}
void DispStr(SqString s)
{ int i;
for (i=0;i<s.length;i++)
printf("%c",s.data[i]);
printf("\n");
}
int InsStr(SqString &s,int i,SqString t)
{
/********** Begin **********/
if(i<=0 || i>t.length+1) return 0;
SqString temp;
temp.length=0;
int j;
for(j=0;j<i-1;j++)
temp.data[j]=s.data[j];
for(j=0;j<t.length;j++)
temp.data[i+j-1]=t.data[j];
for(j=i-1;j<s.length;j++)
temp.data[t.length+j]=s.data[j];
temp.length=s.length+t.length;
s=temp;
return 1;
/********** End **********/
}
int main()
{ SqString s,t;
int i,n;
char ss[100],tt[100];
scanf("%s",ss);
Assign(s,ss);
scanf("%s",tt);
Assign(t,tt);
scanf("%d",&i);
n=InsStr(s,i,t);
if(n>0) DispStr(s);
else printf("fail!\n");
return 0;
}
第2关:子串删除
任务描述
本关任务:将主串中从第i(1<=i<=n)个位置开始的j(j>0)个字符删除掉,当参数错误时返回0,成功插入时返回1。
测试说明
平台会对你编写的代码进行测试:
测试输入:
abcdefg
2 4
预期输出:
afg
测试输入:
abcd
0 2;
预期输出:
fail.
代码如下
#include <stdio.h>
#define MaxSize 100
typedef struct
{ char data[MaxSize];
int length;
} SqString;
void Assign(SqString &s,char str[])
{ int i=0;
while (str[i]!='\0')
{ s.data[i]=str[i];
i++;
}
s.length=i;
}
void DispStr(SqString s)
{ int i;
for (i=0;i<s.length;i++)
printf("%c",s.data[i]);
printf("\n");
}
int DelStr(SqString &s,int i,int j)
{
/********** Begin **********/
if(i<1 || i>s.length+1 || j<=0 || i+j>s.length+1) return 0;
SqString t;
t.length=0;
int n;
for(n=0;n<i-1;n++)
t.data[n]=s.data[n];
for(n=i+j-1;n<s.length;n++)
t.data[n-j]=s.data[n];
t.length=s.length-j;
s=t;
return 1;
/********** End **********/
}
int main()
{ SqString s;
char ss[100];
int i,j,t;
scanf("%s",ss);
scanf("%d%d",&i,&j);
Assign(s,ss);
t=DelStr(s,i,j);
if(i>0) DispStr(s);
else printf("fail.\n");
return 0;
}
第3关:子串定位
任务描述
本关任务:搜索某一段文字中,是否有一个目标子串。
测试说明
平台会对你编写的代码进行测试:
测试输入:
123456
456
预期输出:
4
测试输入:
1234567
223;
预期输出:
fail
代码如下
#include <stdio.h>
#define MaxSize 100
typedef struct
{ char data[MaxSize];
int length;
} SqString;
void Assign(SqString &s,char str[])
{ int i=0;
while (str[i]!='\0')
{ s.data[i]=str[i];
i++;
}
s.length=i;
}
void DispStr(SqString s)
{ int i;
for (i=0;i<s.length;i++)
printf("%c",s.data[i]);
printf("\n");
}
int Index(SqString s,SqString t)
{
/********** Begin **********/
int i=0,j=0,k=-1;
while(i<s.length && j<t.length){
if(s.data[i]==t.data[j]){
i++;
j++;
}else{
i=i-j+1;
j=0;
}
}
if(j>=t.length) k=i-t.length+1;
return k;
/********** End **********/
}
int main()
{ SqString s,t;
char ss[100],tt[100];
int i;
scanf("%s",ss);
Assign(s,ss);
scanf("%s",tt);
Assign(t,tt);
i= Index(s,t);
if(i!=-1) printf("%d\n",i);
else printf("fail\n");
return 0;
}
第4关:子串替换
任务描述
本关任务:将主串中所有出现的子串均替换成另一个子串,当主串中没有子串时返回主串;否则返回替换后的结果串
测试说明
平台会对你编写的代码进行测试:
测试输入:
123452389
23
abc
预期输出:
1abc45abc89
测试输入:
123123123
2
0
预期输出:
103103103
代码如下
#include <stdio.h>
# include <string.h>
#define MaxSize 100
typedef struct
{ char data[MaxSize];
int length;
} SqString;
void Assign(SqString &s,char str[])
{ int i=0;
while (str[i]!='\0')
{ s.data[i]=str[i];
i++;
}
s.length=i;
}
void DispStr(SqString s)
{ int i;
for (i=0;i<s.length;i++)
printf("%c",s.data[i]);
printf("\n");
}
int Index(SqString s,SqString t)
{ int i=0,j=0;
while (i<s.length && j<t.length)
{ if (s.data[i]==t.data[j])
{ i++;
j++;
}
else
{ i=i-j+1;
j=0;
}
}
if (j>=t.length)
return i-t.length+1;
else
return -1;
}
int InsStr(SqString &s,int i,SqString t)
{ int j;
if (i<1 || i>s.length+1)
return 0;
else
{ for (j=s.length-1;j>=i-1;j--)
s.data[j+t.length]=s.data[j];
for (j=0;j<t.length;j++)
s.data[i+j-1]=t.data[j];
s.length=s.length+t.length;
return 1;
}
}
int DelStr(SqString &s,int i,int j)
{ int k;
if (i<1 || i>s.length || j<1 || i+j>s.length+1)
return 0;
else
{ for(k=i+j-1;k<s.length;k++)
s.data[k-j]=s.data[k];
s.length=s.length-j;
return 1;
}
}
SqString RepStrAll(SqString s,SqString s1,SqString s2)
{ /**************begin***************/
int i=Index(s,s1);
while(i>0){
DelStr(s,i,s1.length);
InsStr(s,i,s2);
i=Index(s,s1);
}
return s;
/**************end***************/
}
int main()
{ SqString s,s1,s2,t;
char ss[100],ss1[100],ss2[100];
scanf("%s",ss);
scanf("%s",ss1);
scanf("%s",ss2);
Assign(s,ss);
Assign(s1,ss1);
Assign(s2,ss2);
t=RepStrAll(s,s1,s2);
DispStr(t);
return 0;
}