字符串替换(串)

字符串替换(串)

时间: 1ms        内存:64M

描述:

编写一个C程序实现将字符串中的所有"you"替换成"we"

输入:

输入包含多行数据

每行数据是一个字符串,长度不超过1000

数据以EOF结束

输出:

对于输入的每一行,输出替换后的字符串

示例输入:

you are what you do

示例输出:

we are what we do

提示:

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

#include<stdio.h>
#include<string.h>
int main()
{
	char a[1010];
	while(scanf("%s",a)!=EOF)
	{
		int i,j,k;
		char *t=NULL;
		while((t=strstr(a,"you"))!=NULL)
		{
			*t='w';
			*(t+1)='e';
			strcpy(t+2,t+3);
		}
		printf("%s ",a);
	}
	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=strassign1();  
		p2.data[0]='y';
		p2.data[1]='o';
		p2.data[2]='u';
		p2.len=3;
		p3.data[0]='w';
		p3.data[1]='e';
		p3.len=2;
    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;   
  
} 

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

点赞

发表评论

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