0

したがって、私のコードでは、関数に引数を渡し、trueが返されない場合は、int配列の次のインデックス桁を渡します。

したがって、areaIntA [0]=0の場合; trueを返さないので、areaIntA [0] [1]=01を渡します。それでもtrueが返されない場合は、areaIntA [0] [1] [2] = 012; 等...

私の更新されたコード:

areaInt = areaIntA[0];

do {
    areaCheck = isRegistered(file, areaInt);
    if (areaCheck != 1)
    {
    areaInt = areaIntA[i] * 10 + areaIntA[i+1];
    i++;
    }
} while (areaCheck != 1);

cout << areaCheck << endl;

これはコンパイルされますが、セグメンテーションエラーが表示されます。理由は誰にもわかりません。

4

3 に答える 3

0

ある種の文字列コンテキストで配列整数値を奇妙に同一視しています。これは通常、10進数を意味します。

試す:

int val = 0;
do {
    val = 10 * val + areaInt[i];
    areaCheck = isRegistered(file, val);
    if (areaCheck != 1)
        i++;
} while (areaCheck != 1);

最初のパスでは、 ;valの値になります。areaInt[0]2番目のパスでは、その後にareaInt[0]続きますareaInt[1](たとえば、0と1は1になり、1と2は12になります)。等々。

于 2013-02-07T04:20:18.850 に答える
0

関数にリスト(ベクトル)を取り込んでもらいます。呼び出しごとに、最後に新しい要素を追加します。

例えば。

List< int?> areaIntList;

do {
    areaIntList.Add(areaInt[i]);
    areaCheck = isRegistered(file, areaInt[i]);
    if (areaCheck != 1)
    {
        i++;
    }
} while (areaCheck != 1);

isRegisteredは、使用されているタイプのリストを取り込みます。

于 2013-02-07T04:13:11.527 に答える
0

あなたの質問に対する私の理解は次のとおりです。

  1. isRegisteredファイルと数字の可変長文字列を受け取り、1文字列が登録されているかどうかを返す関数です0
  2. areaIntのような C スタイルの文字列です"31526"
  3. あなたが望むのは、"3"登録されているかどうかを確認することです。そうでない場合"31"は、登録されているかどうかを確認します。"315"そうでない場合は、のすべての桁areaIntが使い果たされるまで、などを試してください。
  4. 最終結果は、登録されている文字列のareaIntうち最短のものである部分文字列になるか、登録された文字列が見つからない場合はエラーになります。

これは私がそれを行う方法です。

  1. 入力文字列areaIntが空の場合、エラーを返します。
  2. i1 から文字列の長さまで カウンターをループします。
    1. sの最初の文字からiテスト文字列を作成しareaIntます。
    2. が登録されているかどうかをテストしsます。そうであれば、ループから抜け出し、 を返しsます。そうでない場合は、ループを続行します。
  3. の最後でループが完了し、areaInt登録された文字列が見つからない場合は、エラーを返します。

ノート。の最後で必ず停止してくださいareaInt。そうしないと、 の最後に到達してareaIntも登録されている文字列が見つからない場合、バッファをオーバーランして、文字列にない要素を読み取ろうとします。

于 2013-02-07T04:30:41.220 に答える