1

intをcharにマップするマップを作成しました。0-25から文字azおよび26-350-9。

for(int i = 0; i<26; i++)
{
    letters.insert(Match::value_type(i,static_cast<char>(letter + x)));

    x++;
}

for(int i = 26; i<36; i++)
{

    letter = '0' + a;
    letters.insert(Match::value_type(i,letter));
    a++;
}

ここに数値を含むをi入力pin[]し、値を探します。

std::map<int, char >::const_iterator it1 = letters.find(pin[0]);
std::map<int, char >::const_iterator it2 = letters.find(pin[1]);
std::map<int, char >::const_iterator it3 = letters.find(pin[2]);
std::map<int, char >::const_iterator it4 = letters.find(pin[3]);
char fourth  = it4->second;
char third   = it3->second;
char second  = it2->second;
char first   = it1->second;
char combo[] = { first, second, third, fourth};
cout << combo << endl;

すべて正常に動作しますが、cout<< combo「abcd [[[[[a [[[[[b [[[[c[[[[[d]]]]]pPP」が表示されます。理由がわかりません...出力に必要なのは「abcd」だけです。どうすればクリーンアップできますか。

4

2 に答える 2

2

C スタイル モードで使用できるようにするには、文字列をnull で終了する必要があります。したがって、これは次のように変更されます。

char combo[] = { first, second, third, fourth, '\0'};

現在、文字が見つかるfourthまで、メモリにあるガベージを出力しています。null

于 2013-03-07T00:01:14.760 に答える
1
char combo[] = { first, second, third, fourth};

4 文字のシーケンスを含む配列を定義しますが、出力可能なヌル終了文字列は含みません。がcout << combo実行されると、出力ストリームはこの配列を一般的な
C スタイルの文字列として扱います。つまり、 に到達するまですべての文字を出力しようとします'\0'。試す:

char combo[] = { first, second, third, fourth, '\0'};
于 2013-03-07T00:00:55.150 に答える