每次给你三个字符串A,B,C,你要把A里面的B全部用C替换.(B在A里面出现的顺序替换)
每三行分别输入A,B,C.(A,B,C的长度都小于256)输出替换后的字符串.SampleInputAaaaaDFaAaUAaaaaDFaAaaUB_BB^ADFFFJH...
每三行分别输入A,B,C.(A,B,C的长度都小于256)
输出替换后的字符串.
Sample Input
AaaaaDFaA
a
U
AaaaaDFaA
aa
U
B_B
B
^
ADFFFJHJHJ
H
haha
Sample Output
AUUUUDFUA
AUUDFaA
^_^
ADFFFJhahaJhahaJ
(用C哈) 展开
输出替换后的字符串.
Sample Input
AaaaaDFaA
a
U
AaaaaDFaA
aa
U
B_B
B
^
ADFFFJHJHJ
H
haha
Sample Output
AUUUUDFUA
AUUDFaA
^_^
ADFFFJhahaJhahaJ
(用C哈) 展开
2个回答
展开全部
这里的Test[] 代表A
Find_Str[] 代表B
Replace_Str[] 代表C
void Replace(char Test[],char Find_Str[],char Replace_Str[])
{
int Test_Len = strlen(Test);
int Find_Str_Len = strlen(Find_Str);
int Replace_Str_Len = strlen(Replace_Str);
int i,j,k,Sum=0;
for(i=0;i< Test_Len - Find_Str_Len + 1;i++)
{
for(j=0;j<Find_Str_Len;j++)
if(Test[j+i]!=Find_Str[j])
break;
if(j==Find_Str_Len)
{
Sum++;
if(Replace_Str_Len>=Find_Str_Len)/*替换字符串和被替换字符串长度比较*/
for(k=Test_Len-1;k>=i+Find_Str_Len-1;k--)/*向后移动*/
Test[k+Replace_Str_Len-Find_Str_Len] = Test[k];
else
for(k=i+Find_Str_Len;k<Test_Len;k++)/*向前移动*/
Test[k+Replace_Str_Len-Find_Str_Len] = Test[k];
Test_Len += Replace_Str_Len-Find_Str_Len; /*改变字符串长度*/
Test[Test_Len] = '\0';
for(k=i;k<Replace_Str_Len+i;k++)
Test[k] = Replace_Str[k-i];
i += Replace_Str_Len;/*关键之处:当替换数中包括被替换数时,防止反复替换,*/
}
}
}
Find_Str[] 代表B
Replace_Str[] 代表C
void Replace(char Test[],char Find_Str[],char Replace_Str[])
{
int Test_Len = strlen(Test);
int Find_Str_Len = strlen(Find_Str);
int Replace_Str_Len = strlen(Replace_Str);
int i,j,k,Sum=0;
for(i=0;i< Test_Len - Find_Str_Len + 1;i++)
{
for(j=0;j<Find_Str_Len;j++)
if(Test[j+i]!=Find_Str[j])
break;
if(j==Find_Str_Len)
{
Sum++;
if(Replace_Str_Len>=Find_Str_Len)/*替换字符串和被替换字符串长度比较*/
for(k=Test_Len-1;k>=i+Find_Str_Len-1;k--)/*向后移动*/
Test[k+Replace_Str_Len-Find_Str_Len] = Test[k];
else
for(k=i+Find_Str_Len;k<Test_Len;k++)/*向前移动*/
Test[k+Replace_Str_Len-Find_Str_Len] = Test[k];
Test_Len += Replace_Str_Len-Find_Str_Len; /*改变字符串长度*/
Test[Test_Len] = '\0';
for(k=i;k<Replace_Str_Len+i;k++)
Test[k] = Replace_Str[k-i];
i += Replace_Str_Len;/*关键之处:当替换数中包括被替换数时,防止反复替换,*/
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <string.h>
int main(void)
{
char aa[65026], dest[256], change[256], tmp[65026];
char *p = NULL, *perend = NULL;
while(NULL != gets(aa))
{
gets(dest);
gets(change);
perend = aa;
while(NULL != (p = strstr(perend, dest)))
{
sprintf(tmp, "%s%s", change, &p[strlen(dest)]);
strcpy(p, tmp);
perend = p + strlen(change);
}
printf("%s\n", aa);
}
return 0;
}
关于字符串长度。
我考虑的是如果下面的case如何不越界,故设为65026
111111111....111(255个1)
1
nnnnnnnnn....nnn(255个n)
那么返回最大字符串长度为255*255+1=65026
#include <string.h>
int main(void)
{
char aa[65026], dest[256], change[256], tmp[65026];
char *p = NULL, *perend = NULL;
while(NULL != gets(aa))
{
gets(dest);
gets(change);
perend = aa;
while(NULL != (p = strstr(perend, dest)))
{
sprintf(tmp, "%s%s", change, &p[strlen(dest)]);
strcpy(p, tmp);
perend = p + strlen(change);
}
printf("%s\n", aa);
}
return 0;
}
关于字符串长度。
我考虑的是如果下面的case如何不越界,故设为65026
111111111....111(255个1)
1
nnnnnnnnn....nnn(255个n)
那么返回最大字符串长度为255*255+1=65026
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询