1

多項式の係数を char 配列から int 配列に入れようとして
いますが、これは次のとおりです。

char string[] = "-4x^0 + x^1 + 4x^3 - 3x^4";


スペースで-4x^0
x^1
4x^3
3x^4にトークン化できます

だから私は取得しようとしています: -4, 1, 4, 3 を int 配列に

 int *coefficient;
 coefficient = new int[counter];

 p = strtok(copy, "  +");
 int a;
 while (p)
 {
  int z = 0;
  while (p[z] != 'x')
   z++;
  char temp[z];
  strncpy(temp[z], p, z);
  coefficient[a] = atoi(temp);
  p = strtok(NULL, "  +");
  a++;
 }

ただし、 strncpy(temp[z], p, z); で char* を char に変換できないというエラーが表示されます。

error: invalid conversion from ‘char’ to ‘char*’  
error: initializing argument 1 of ‘char* strncpy(char*, const char*, size_t)’

これを行う最良の方法は何ですか?

4

4 に答える 4

4

これ:

strncpy(temp[z], p, z);

する必要があります:

strncpy(temp, p, z);

ただし、strncpy常に文字列が null で終了するとは限らないことに注意してください。

また、z係数の長さになりますが、ヌル ターミネータ用にバッファに余分なバイトが必要です。

アップデート:

あなたのリンクを調べてみると、まだいくつかの深刻な問題が見られます:

  • 「-」を使用することはできません。これは、「- strtok4x」にあるものと必要なものを選択するためです。スペースのみで分割し、+/- 演算子をトークンとして処理する必要があると思います。
  • このstrncpy関数は文字列を終了せずに残します。これによりatoi、クラッシュしたり、間違った値がランダムに与えられたりする可能性があります。慣用的な形式の 1 つは、ターミネータを手動で記述することです (例: temp[z] = '\0'.
  • 出力値が得られない理由は、初期化されていないcoefficient[a] =ためにランダムなメモリに書き込んでいるためaです。
于 2009-11-26T02:25:34.770 に答える
0

charに aを渡していますstrncpy:

  strncpy(temp[z], p, z);

最初の引数はchar*、単一の ではなく、ポインターでなければなりませんchar。おそらくあなたがしようとしていることは次のとおりです。

  strncpy(temp, p, z);
于 2009-11-26T02:25:21.373 に答える
0

他の連中は、temp[z] ではなく temp への strncpy()'ing について正しいです。

自由変数の指数も取得することをお勧めします。あなたが無視しているように見える暗黙の「0x^2」用語を観察しました。次のステップが x のさまざまな値に対して多項式を評価することである場合 (または、さらに悪いことに、それに対してソルバーを実行すること)、それらの累乗を知る必要があります。

于 2009-11-26T02:45:05.060 に答える
0

この種のソリューションは簡単に作成できますが、余分な空白、空白の欠落、および複数の演算子と変数名を処理するのに十分な幅に対して証明するために、この種の戦略はますます複雑で困難になります (特に、意味のあるエラーが必要な場合)解析が失敗した場合のメッセージ)。

私には、boost.regex (または、タスク全体で操作の順序を分析する必要がある場合は、boost.spirit を使用することもできます) を使用して防弾ソリューションを実装する方が簡単だと思われます。 .

于 2009-11-26T08:40:35.750 に答える