字符串替换(串)
时间: 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;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。