替换c字符串中的单词

时间:2012-11-05 04:07:55

标签: string

我的代码存在轻微问题。我刚做了一个小程序来测试我的实际程序。想法是用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;
}

2 个答案:

答案 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;
}