运行后出现乱码。
#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;
void rep(char *str,char *fstr,char *rstr)
{
int i,j,k,n,x,y=0,cnt=0;
char sss[50];
n=strlen(fstr);
x=strlen(rstr);
for(i=0;str[i]!='\0';i++) {
if(str[i]==fstr[0]) {
k=1;
j=i+1;
while(j<i+n) {
if(str[j]==fstr[k]) {
j++;
k++;
}
else break;
}
if(j==i+n) {
strcat(sss,rstr);
cnt++;
i=j-1;
y=j+(x-n)*cnt-1;
}
}
else sss[y]=str[i];
y++;
}
sss[y]='\0';
strcpy(str,sss);
}
int main()
{
char str[50]="iffordowhileelsewhilebreak";
char fstr[10]="while";
char rstr[10]="struct";
/*gets(str);
gets(fstr);
gets(rstr);*/
rep(str,fstr,rstr);
cout<<str<<endl;
return 0;
}
#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;
void rep(char *str,char *fstr,char *rstr)
{
int i,j,k,n,x,y=0,cnt=0;
char sss[50];
memset(sss, 0, 50); //加上这个
n=strlen(fstr);
x=strlen(rstr);
for(i=0;str[i]!='\0';i++) {
if(str[i]==fstr[0]) {
k=1;
j=i+1;
while(j<i+n) {
if(str[j]==fstr[k]) {
j++;
k++;
}
else break;
}
if(j==i+n) {
strcat(sss,rstr);
cnt++;
i=j-1;
y=j+(x-n)*cnt-1;
}
}
else sss[y]=str[i];
y++;
}
sss[y]='\0';
strcpy(str,sss);
}
int main()
{
char str[50]="iffordowhileelsewhilebreak";
char fstr[10]="while";
char rstr[10]="struct";
/*gets(str);
gets(fstr);
gets(rstr);*/
rep(str,fstr,rstr);
cout<<str<<endl;
return 0;
}
https://ideone.com/LfYSkP
在线测试结果
iffordostructelsestructbreak
没有c币了。
比较奇怪的写法。
1.char str[50]="iffordowhileelsewhilebreak"; 如果要strlen,那么 定义完后。加个\0 .eg: str[手动算位置]='\0';
2. 算好了位置,那么 for(i=0;str[i]!='\0';i++) { 就用长度了strlen,str[i]!='\0' 太奇怪的写法。
根本上就是 str[50],定义完,里面的内容是未定义的。要摸初始化全部为\0,要不算好位置赋值 '\0'
哪里乱码了,没有问题啊
参考stackoverflow上这位老哥写的吧
https://stackoverflow.com/questions/50386791/memory-management-in-replace-function/50387158#50387158
新建一个工程 把代码粘贴进去试一下 我就是这样解决的