-2

これは私が今持っているコードです:

 int main() {
    char stupac1, stupac2;
    for (stupac1 = 'A'; stupac1 <= 'Z'; ++stupac1)
    {
        for (stupac2 = 'a'; stupac2 <= 'z'; ++stupac2)
              // between the caps and the non caps there are 32 letters (ASCII code)
              if(strcmp (reinterpret_cast <const char*> (stupac1),
                         reinterpret_cast <const char*> (stupac2)) == 32 )
              { 
                  cout <<stupac1 << stupac2 << endl;
              }
              else
              {
                  cout << "These letters suck" << endl;
              }
    }
    return 0;
}

タスク: 2 つの列に AZ と az の文字を含むテーブルを作成する 2 つの連続したループを含むプログラムを作成する必要があります。

を使用する必要がありますforが、不要strcmpな場合は削除できます。私は何かを試していましたが、このコードを実行しても何も出力されず、クラッシュします。

4

3 に答える 3

2

C++ では、文字 ( ) は文字列ではなく、charと同様のスカラー値です。intたとえば'A'、ASCII/Unicode システムを想定すると、65 に等しくなります。等しいかどうかをテストするには、==演算子を使用します。

ASCII で A から Z までを「カウント」するのは非常に簡単ですが、すべての C++ 実装が ASCII であるとは限りません。先生とのボーナスポイントについては、プログラムがEBCDICの下では実行されないことを指摘してください。

また、文字列に慣れる前にchar *、実際の C++ プログラムではほぼ例外なく を使用することに注意してください。これは、比較std::stringにも演算子を使用します。==

于 2012-06-28T12:01:30.493 に答える
0

単一charの は の小さいバージョンのようなものなので、 のint場合と同様に、それらを比較したり、それらの値を減算したりできますint

テストのはるかに単純なバージョンは次のようになります

if (stupac2 - stupac1 == 32)

ほら、はるかに簡単です。:-)

必要と思われるときはいつでもreinterpret_cast、おそらく間違った方法で物事を試みています。

于 2012-06-28T12:54:27.740 に答える