0

ここで私のコードに少し問題があります。実際のプログラムに入れるためにテストする小さな小さなプログラムを作成しました。add 変数のすべての "(star)here(star)" を文字列に置き換えるという考え方です。ただし、プログラムを実行すると、最終的な答えは正確ではありません。これらは私の結果です: I_have_a_star_which is super pretty

I_have_a_star_which is super pretty._That_is_great!_I_also_have_a_friendwhich is super pretty.

I_have_a_star_which is super pretty._That_is_great!_I_also_have_a_friendwhich is super pretty!

問題が何であるかについてのアイデアは大歓迎です。

#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;
}
4

2 に答える 2

1

問題は、文字を初期化せずに配列にコピーしtempたり、NUL で終了したりしていないことです。そのため、最後に余分なゴミの内容を呼び出しstrcatたり印刷しようとすると、問題が発生する可能性があります。 ループの前にtemp固執するか、宣言を に変更します。または、呼び出しの直前とループの直後に追加することもできます。memset(temp, 0, sizeof(temp));whiletemp[500] = ""temp[j] = '\0';strcat

于 2012-11-05T04:22:38.430 に答える
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;
}
于 2012-11-05T04:27:18.643 に答える