字符串的修改(串)

字符串的修改(串)

时间: 1ms        内存:128M

描述:

一个字符串s、一个字符串t,判断t是否是s的子串,若是则将s中所有出现了t串的地方换成指定的字符或字符串p,若不是,则输出NO

输入:

一个字符串s、一个字符串t,要换的字符或字符串

输出:

输出修改后的s串

示例输入:

asdfasdf
132
saf

示例输出:

NO

提示:

参考答案(内存最优[752]):

#include<stdio.h> 
#include<stdlib.h> 
struct string 
{ 
    char data[200]; 
    int len; 
}; 
struct string strassign() /*建立顺序串*/
{ 
  struct string s; 
  int i; 
  char c; 
  for(i=0;;i++) 
  { 
    if(scanf("%c",&c)&&c!='\n') 
        s.data[i]=c; 
    else
        break; 
  } 
  s.len=i; 
  return s; 
} 
struct string strassign1() /*建立顺序串*/
{ 
  struct string s; 
  int i; 
  char c; 
  for(i=0;;i++) 
  { 
    if(scanf("%c",&c)!=EOF) 
        s.data[i]=c; 
    else
        break; 
  } 
  s.len=i; 
  return s; 
}     
struct string substr(struct string s,int i,int j) /*把s中从i起长度为j的字符给字符串str*/
{ 
    struct string str; 
    int k; 
    str.len=0; 
    for(k=i-1;k<i+j-1;k++) 
        str.data[k-i+1]=s.data[k]; 
    str.len=j; 
    return str; 
} 
int strequal(struct string s,struct string t)/*判断二个字符串是不是相等*/
{ 
    int same=1,i; 
    if(s.len!=t.len) 
        same=0; 
    else
        for(i=0;i<s.len;i++) 
            if(s.data[i]!=t.data[i]) 
            { 
                same=0; 
                break; 
            } 
    return same; 
  
} 
struct string delstr(struct string s,int i,int j)/*删除从i,长度为j的字符*/
{
	int k;
	struct string str;
	str.len=0;
	if(i<=0||i>s.len||i+j>s.len+1)
		return str;
	for(k=0;k<i-1;k++)
		str.data[k]=s.data[k];
	for(k=i+j-1;k<s.len;k++)
	    str.data[k-j]=s.data[k];
	str.len=s.len-j;
	return str;
}
struct string  repstr(struct string s,int i,int j,struct string t)
{
	int k;
	struct string str;
	str.len=0;
	if(i<=0||i>s.len||i+j-1>s.len)
		return str;
	for(k=0;k<i-1;k++)
		str.data[k]=s.data[k];
	for(k=0;k<t.len;k++)
		str.data[i+k-1]=t.data[k];
	for(k=i+j-1;k<s.len;k++)
		str.data[t.len+k-j]=s.data[k];
	str.len=s.len-j+t.len;
	return str;
}
int main() 
{ 
    int m,n,j=0,i,max=1,k,flag=0;
	char c,a[100];
    struct string  p1,p2,p3,p4; 
	p1=strassign();  
    p2=strassign(); 
	p3=strassign1(); 
    for(i=0;i<p1.len;i++)  
    {  
        p4=substr(p1,i,p2.len);  
        if(strequal(p2,p4))  
        {  
			flag=1;
            p1=repstr(p1,i,p2.len,p3);
        }  
    } 
	if(flag)
    {
		for(i=0;i<p1.len;i++)
           printf("%c",p1.data[i]);  
	}
	else
		printf("NO");
   return 0;  

}


   

参考答案(时间最优[0]):

#include<stdio.h> 
#include<stdlib.h> 
struct string 
{ 
    char data[200]; 
    int len; 
}; 
struct string strassign() /*建立顺序串*/
{ 
  struct string s; 
  int i; 
  char c; 
  for(i=0;;i++) 
  { 
    if(scanf("%c",&c)&&c!='\n') 
        s.data[i]=c; 
    else
        break; 
  } 
  s.len=i; 
  return s; 
} 
struct string strassign1() /*建立顺序串*/
{ 
  struct string s; 
  int i; 
  char c; 
  for(i=0;;i++) 
  { 
    if(scanf("%c",&c)!=EOF) 
        s.data[i]=c; 
    else
        break; 
  } 
  s.len=i; 
  return s; 
}     
struct string substr(struct string s,int i,int j) /*把s中从i起长度为j的字符给字符串str*/
{ 
    struct string str; 
    int k; 
    str.len=0; 
    for(k=i-1;k<i+j-1;k++) 
        str.data[k-i+1]=s.data[k]; 
    str.len=j; 
    return str; 
} 
int strequal(struct string s,struct string t)/*判断二个字符串是不是相等*/
{ 
    int same=1,i; 
    if(s.len!=t.len) 
        same=0; 
    else
        for(i=0;i<s.len;i++) 
            if(s.data[i]!=t.data[i]) 
            { 
                same=0; 
                break; 
            } 
    return same; 
  
} 
struct string delstr(struct string s,int i,int j)/*删除从i,长度为j的字符*/
{
	int k;
	struct string str;
	str.len=0;
	if(i<=0||i>s.len||i+j>s.len+1)
		return str;
	for(k=0;k<i-1;k++)
		str.data[k]=s.data[k];
	for(k=i+j-1;k<s.len;k++)
	    str.data[k-j]=s.data[k];
	str.len=s.len-j;
	return str;
}
struct string  repstr(struct string s,int i,int j,struct string t)
{
	int k;
	struct string str;
	str.len=0;
	if(i<=0||i>s.len||i+j-1>s.len)
		return str;
	for(k=0;k<i-1;k++)
		str.data[k]=s.data[k];
	for(k=0;k<t.len;k++)
		str.data[i+k-1]=t.data[k];
	for(k=i+j-1;k<s.len;k++)
		str.data[t.len+k-j]=s.data[k];
	str.len=s.len-j+t.len;
	return str;
}
int main() 
{ 
    int m,n,j=0,i,max=1,k,flag=0;
	char c,a[100];
    struct string  p1,p2,p3,p4; 
	p1=strassign();  
    p2=strassign(); 
	p3=strassign1(); 
    for(i=0;i<p1.len;i++)  
    {  
        p4=substr(p1,i,p2.len);  
        if(strequal(p2,p4))  
        {  
			flag=1;
            p1=repstr(p1,i,p2.len,p3);
        }  
    } 
	if(flag)
    {
		for(i=0;i<p1.len;i++)
           printf("%c",p1.data[i]);  
	}
	else
		printf("NO");
   return 0;  

}


   

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注