2012-03-06 16 views
2

文字列の各文字をASCII値に簡単に変換して値を合計できる方法を教えてもらえますか? ハッシュ関数の値を合計する必要があります。 Javaや.NETでCharとは対照的に、彼らは(すでにASCII表現であり、あなたがstd::stringまたはchar*は、あなたが直接文字を合計することができ意味仮に文字列の各文字をASCIIに変換する

#include <string> 
int main() { 
    int sum = 0; 
    std::string str = "aaabbb"; 
    for (unsigned int i = 0; i < str.size(); i++) { 
    sum += str[i]; 
    } 
    return 0; 
} 

答えて

11

文字列の各文字はすでにasciiです)。十分に大きな結果型(int以上)を使用してください。

一方、C++の文字列には、エクササイズでない限りたくさんのハッシュ関数が用意されていますが、そのうちの1つを選択することをお勧めします。

+0

それはもちろんEBCDICのでない限り、)(が、その後、あなたは合計と思いますEBCDICの値 - コードはまだ実行されますが、別の結果が得られます) – MSalters

0

3

ハッシュを作成するには、基本的にだけでなく文字列のASCII値の各文字の整数値を必要としています。彼らは2つの非常に異なるものです。 ASCIIはエンコーディングです。あなたの文字列もUTF-8でエンコードされている可能性があります。文字列が1つのNULLで終わっても、各文字は1バイト以上を占めることになります。いずれにせよ、ペルーの解があなたが望むものです。しかし、これは別の答えとして書いています。なぜなら、char型のエンコーディングと格納タイプの違いを理解する必要があるからです。

また、C + 11では、標準ライブラリに組み込まれているハッシュ関数があると言及する価値があります。これがあなたの使い方です。

#include <string> 
#include <iostream> 
#include <functional> 

int main() { 
    const std::string str = "abcde"; 
    std::cout << std::hash<std::string>()(str) << std::endl; 
    return 0; 
} 

最後に、あなたはまだのstd ::累積使用して、C++ 11のない文字列の要素を合計することができます

#include <string> 
#include <iostream> 
#include <numeric> 

int main() { 
    //0x61+0x62+0x63+0x64+0x65=0x1ef=495 
    const std::string str = "abcde"; 
    std::cout << std::accumulate(str.begin(),str.end(),0) << std::endl; 
    return 0; 
} 
+0

非常に参考になりました。 –

関連する問題