Copyright (c) 2016,
烟台大学计算机与控制学院 All ringts reserved.
文件名称:OJ总结<13>--包含B的字符串
作 者:王兴振
完成日期:2016年12月13日
版 本 号:未知
题目描述:
一个字符串s、一个字符串t,判断t是否是s的子串,若是则将s中所有出现了t串的地方换成指定的字符或字符串p,若不是,则输出NO
输 入:
一个字符串s、一个字符串t,要换的字符或字符串
输 出:
输出修改后的s串
样例输入:
asdfasdf
132
saf
样例输出:
NO
答 案:
#include <stdio.h>
#include <string.h>
int main()
{
int i=0,j,p=0,u=0,o,g,x,d;
char a[80],b[80],c[80];
gets(a);
gets(b);
gets(c);
while(a[i]!='\0')
{
x=1;
o=i;
for(j=0;j<strlen(b);j++)
{
if(a[i]==b[j])
p++;
i++;
}
i=o;
if(p==strlen(b))
{
u=1;
j=0;
if(strlen(b)==strlen(c))
for(j=0;j<strlen(b);j++)
{
a[i]=c[j];
i++;
}
else if(strlen(b)>strlen(c))
for(j=0;j<strlen(a);j++)
{
if(x)
for(g=0;g<strlen(c);g++)
{
a[i]=c[g];
i++;
x=0;
j=g;
}
a[i]=a[i+strlen(b)-strlen(c)];
i++;
}
else if(strlen(b)<strlen(c))
for(j=0;j<strlen(c);j++)
{
d=strlen(c)-strlen(b);
if(x)
for(g=strlen(a);g>i+d;g--)
{
a[g+1]=a[g];
x=0;
}
a[i]=c[j];
i++;
}
}
p=0;
i=o;
i++;
}
if(u)
printf("%s", a);
else
printf("NO\n");
return 0;
}
总 结:
这个题好难,磨了好久出来的,笨办法,对每个字符进行判断,先判断是不是子字符串,再分三种情况,就是被替换字符串和替换字符串长度大小关系,
再对每一种情况替换就行了。