我的代码存在轻微问题。我刚做了一个小程序来测试我的实际程序。想法是用add变量中的字符串替换所有“(star)here(star)”。但是,当我运行程序时,我的最终答案并不完全正确。这些是我的结果: I_have_a_star_which非常漂亮
I_have_a_star_which超级漂亮.That_is_great!_I_also_have_a_girlfriend,非常漂亮
I_have_a_star_which超级漂亮.That_is_great!_I_also_have_a_girlfriend这是超级优雅!
任何有关问题的想法都会受到高度赞赏。
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main ( )
{
char array[500] = "I_have_a_star_*here*._That_is_great!_I_also_have_a_girlfriend_*here*!",
temp[500],
add[500] = "which is super pretty";
int i=0, j=0;
while(array[i] != '\0')
{
if(array[i] != '*')
{
temp[j]=array[i];
i++;
j++;
}
else
{
strcat(temp,add);
cout << temp << endl;
i+=6;
j+=strlen(add);
}
}
cout << temp << endl;
return 0;
}
答案 0 :(得分:1)
问题是你在没有初始化它的情况下将字符复制到temp
数组中,或者NUL终止它。因此,当您致电strcat
或尝试打印temp
内容时,额外的垃圾可能会搞砸了。坚持memset(temp, 0, sizeof(temp));
在while
循环之前或将声明更改为temp[500] = ""
。或者,您可以在调用temp[j] = '\0';
之前添加strcat
,然后再循环。
答案 1 :(得分:0)
老兄试试这个......
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main ( )
{
char array[500] = "I_have_a_star_*here*._That_is_great!_I_also_have_a_girlfriend_*here*!",
temp[500],
add[500] = "which is super pretty";
int i=0, j=0;
while(array[i] != '\0')
{
if(array[i] != '*')
{
temp[j]=array[i];
i++;
j++;
}
else
{
strcat(temp,add);
i+=6;
j+=strlen(add);
}
}
cout << temp << endl;
return 0;
}