2009-06-08 14 views
1

私は、ASCII文字配列から引き出された16進値と2進値のパリティビットを生成する小さなプログラムを作成しようとしています。私は合計3文字の配列を持っています。たとえば:文字配列内の値の複数の出現を検索し、出現回数をリストします。 VC++

const char *caASCII[] = {"A", "B", "C", ...}; 

const char *caASCIIBinary[] = {"01000001", "01000010", "01000011", ...}; 

const char *caASCIIHex[] = {"41", "42", "43", ...}; 

だから、私は「A」と入力し、それがバイナリと六角アレイに対応する値を発見し、それらを表示します。私は検索を行う線形検索機能を持っており、正常に動作します。

たとえば、バイナリ値の1つに「1」が発生した回数をカウントし、その値から判断すると(1の数が偶数または奇数の場合)、aバイナリ値の最後に "0"または "1"私はそれが偶数か奇数かどうかを見るために2で割る必要があると思う16進値。

私は、配列を別のタイプ(多分整数)に変更しなければならないと思っています。どのように私はこれに近づくことができますか?

答えて

0

文字を数える関数を探していますか?あなたは簡単に1を自分で書くことができます。

size_t strcnt(const char *s, char c) { 
    size_t count = 0; 
    while (*s) 
    if (*s++ == c) 
     count++; 
    return count; 
} 

あなたはこのようにそれを使用します。

#include <iostream> 
// ... 

size_t count = strcnt(caASCIIBinary[2], '1') 
std::cout << count << " bits set in " << caASCIIBinary[2] << std::endl; 
+0

私はそれを使用する方法を理解し、本当にわかりません。私は配列の1つを指し示すことを望むと仮定し、2番目の変数は検索する文字ですか?あなたはこれを使う方法の例を挙げることができますか? –

1

3つの配列のアイデアは巨大なナンセンスである:それらは簡単にいくつかの操作で情報を計算しています。 例えば、バイナリの担当者に「1」の番号を知っている:あなたの質問への方向の回答については

int newInt = yourChar << 1; 
newInt += bits_on(yourchar) % 2 == 0 ? 1 : 0; 
0

int bits_on(char yourchar) { 
    int count = 0; 
    while (yourchar > 0) { 
     count += yourchar % 2; 
     yourchar >>= 1; 
    } 
    return count; 
    } 

は「それが偶数の場合1を追加」し、これをあなたは絶対に(これをしない)文字列の代わりに文字*さんを使用して固定した場合

#include <algorithms> 
#include <string> 

const std::string caASCIIBinary[] = {"01000001", "01000010", "01000011", ...}; 

int num_ones = std::count(caASCIIBinary[5].begin(), caASCIIBinary[5].end(), '1'); 

バイナリ文字列に1つの数をカウント3210
int num_ones = std::count(caASCIIBinary[5], caASCIIBinary[5]+strlen(caASCIIBinary[5]), '1'); 

ただし、実際にやりたいことはわかりません。すでに取り付けたパリティビットとビットセットを構築することにより、それを行うためのより簡単方法かもしれない

#include <bitset> 
#include <limits.h> 
#include <algorithms> 
using namespace std; 

string parity_string(char ch){ 
    string str(bitset<CHAR_BIT>(ch).to_string<char,char_traits<char>,allocator<char> >()); 
    if(count(str.begin(), str.end(), '1') % 2) { str.append("1"); } 
    else { str.append("0"); } 
    return str; 
} 

が、私は」:文字与えられた、あなたは出力に接続パリティビットを持つ文字列をしたい、ように聞こえますそれについて考える必要があります。

編集:バム:

string parity_string(char ch){ 
    bitset<CHAR_BIT+1> bs(ch); 
    bs[CHAR_BIT] = bs.count() % 2; 
    return bs.to_string<char,char_traits<char>,allocator<char> >(); 
} 
関連する問題