9

文字列から整数への変換プロセスを理解しようとしています。ハッシュされるキー値が状態の名前であるハッシュを使用してプログラムを実行しています。私の調査によると、atoi() は機能しないようです。

単語の各文字を分解して個別に変換する必要がありますか? ASCII を使用しますか? 私は完全に間違った方向に進んでいますか?

私は非常に迷っているので、どんな情報でも素晴らしいでしょう。ありがとう!

4

5 に答える 5

19

C++11 では、std::hashヘッダー<functional>で呼び出される実装定義のハッシュ関数が導入されています。これは、文字列クラスstd::stringstd::wstringなどに特化しています。

これを行うのと同じくらい簡単です:

#include <iostream>
#include <functional> //for std::hash
#include <string>

int main() {
    std::string str = "Hello World";
    std::hash<std::string> hasher;
    auto hashed = hasher(str); //returns std::size_t
    std::cout << hashed << '\n'; //outputs 2146989006636459346 on my machine
}

ユーザー定義型の特殊化std::hashもそれほど複雑ではありません。std::hashただし、C 文字列または C 文字列のいずれにも特殊化されていないことに注意してくださいconst char*

于 2013-04-18T05:56:46.677 に答える
0

boost::lexical_castはあなたのニーズに合うかもしれません。

#include <string>
#include <boost/lexical_cast.hpp>

int main()
{
    std::string str = "123456";
    try
    {
       int i = boost::lexical_cast<int>(str);
       // i should be 123456 here
    }
    catch(const boost::bad_lexical_cast&)
    {
        //bad format
    }
}
于 2013-04-18T05:43:55.430 に答える
0

文字列がメモリに残る場合、一部のライブラリは文字列のアドレスをハッシュとして返すだけです。

于 2013-04-18T06:29:42.373 に答える