2016-09-08 10 views
2

が、私は2つの文字列を持っている。しかしXOR 2つのバイナリ文字列のC++

STRING1 :  011011110011000 

STRING2 :  011001000001000 

EXPECTED OUTPUT : 000010110010000 

私はそれらをXORしようとすると、(ビット単位)以下のコードを使用して、出力は空白です。 コード:

for(int i = 0; i<15; i++) 
{ 
    final_key[i] = STRING1[i]^STRING2[i]; 
    cout<<" XOR = "<<final_key[i]; 
} 

助けてください。

答えて

6

XOR 2 charを一度に使用しようとしています。代わりに試してみてください:

final_key[i] = ((STRING1[i]-'0')^(STRING2[i]-'0')) + '0'; 

説明

はASCII値のためhereを参照してください。

'0'のASCII値は48であり、'1'のASCII値は49 48^49 1、48^48及び49^49これらEOFのいずれかを表すであろう、charに0または1の値を返す0でありますchar(0の場合)またはSOH(存在する場合)のいずれかが正しく出力されます。

したがって、XOR演算を実行する前に、各charをビット(0または1)に変換する必要があります。したがって、あなたはその後、適切な出力

+0

あなたのソリューションの作品で、s1[i]s2[i]と等しくないかどうかを確認できます。できるだけ早くそれを受け入れます。任意の説明(可能な場合)。 –

+5

私は単純化を指摘したいと思った。 48^49 = 1と48^48 = 49^49 = 0なので、実際には各入力文字から「0」を引く必要はありません。結果に '' 0 ''を加えるだけでよい。 –

+0

はい、私はそれを実現しました。他の答えはまた、私が存在していたとは思えない素晴らしいショートカットです。 –

2

文字「0」のASCII値を取得するために戻って'0'を追加して、「1」が48あり、XOR演算を行い、桁のnumrical値を取得するために、各charから'0'を引くことができます

char result = std::abs(a - b) + '0'; 
3

C++あなたは文字をXORしているstd::bitset<>

#incude <string> 
#incude <bitset> 
#incude <iostream> 

int main() 
{ 
    std::string s1 = "010101010101010101"; 
    std::string s2 = "101010101000001111"; 

    auto result = std::bitset<32>(s1)^std::bitset<32>(s2); 
    std::cout << result << std::endl; 
} 
+0

このコードは、次のエラーを生成します。 'result'は型名を指定しません。 自動結果= std :: bitset <32>(s1)^ std :: bitset <32>(s2); –

+0

-std = C++ 11フラグでコンパイルしましたか?そうでない場合は、明示的に戻り値の型を指定する必要があります。 –

+0

よろしくお願いします。ありがとうございました。 –

0

を持っていますし、49 は、B∈{ '0'、 '1'}あなたが使用することの2つの文字の上にXORを適用します。それwあなたは結果を文字に変換せずに結果をそのまま保存しています。

string s1="011011110011000"; 
string s2="011001000001000"; 
char final_key[15]; 
for(int i = 0; i<15; i++) 
{ 
final_key[i] = (s1[i]^s2[i])+'0'; //paranthesis is important 
cout<<final_key[i]; 
} 

また、結果は1

final_key[i]=(s1[i]!=s2[i]?'1':'0'); 
関連する問題