文字列から整数への変換プロセスを理解しようとしています。ハッシュされるキー値が状態の名前であるハッシュを使用してプログラムを実行しています。私の調査によると、atoi() は機能しないようです。
単語の各文字を分解して個別に変換する必要がありますか? ASCII を使用しますか? 私は完全に間違った方向に進んでいますか?
私は非常に迷っているので、どんな情報でも素晴らしいでしょう。ありがとう!
文字列から整数への変換プロセスを理解しようとしています。ハッシュされるキー値が状態の名前であるハッシュを使用してプログラムを実行しています。私の調査によると、atoi() は機能しないようです。
単語の各文字を分解して個別に変換する必要がありますか? ASCII を使用しますか? 私は完全に間違った方向に進んでいますか?
私は非常に迷っているので、どんな情報でも素晴らしいでしょう。ありがとう!
C++11 では、std::hash
ヘッダー<functional>
で呼び出される実装定義のハッシュ関数が導入されています。これは、文字列クラスstd::string
、std::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*
。
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
}
}
文字列がメモリに残る場合、一部のライブラリは文字列のアドレスをハッシュとして返すだけです。