字符串

第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;
}
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值