Работа со строками
F474M0R64N4 opened this issue · 5 comments
F474M0R64N4 commented
Как работать со строками?
Можете привести пример для хеширования строки?
erthink commented
Для хеширования блока данных нужно передать его адрес (указатель на начало) и размер (количество байт).
Например, hash = t1ha0(str, strlen(str), seed);
для традиционных C
-строк.
F474M0R64N4 commented
@leo-yuriev правильно?
UINT64 Hash = 0;
auto str = "hash";
Hash = t1ha0(str, strlen(str), 0x1EE7C0DE);
erthink commented
Да, так можно.
Но лучше:
inline uint64_t t1ha0(const char*cstr, const uint64_t seed) {
return t1ha0(cstr, strlen(cstr), seed);
}
inline uint64_t t1ha0(const std::string &str, const uint64_t seed) {
return t1ha0(str.data(), str.size(), seed);
}
inline uint64_t t1ha0(const std::string_view &str, const uint64_t seed) {
return t1ha0(str.data(), str.size(), seed);
}
Или
struct cxx_string_functor_for_t1ha0 {
const uint64_t seed;
cxx_string_functor_for_t1ha0(const uint64_t seed) : seed(seed) {}
uint64_t operator()(const char*cstr) const {
return t1ha0(cstr, strlen(cstr), seed);
}
uint64_t operator()(const std::string &str) const {
return t1ha0(str.data(), str.size(), seed);
}
uint64_t operator()(const std::string_view &str) const {
return t1ha0(str.data(), str.size(), seed);
}
};
F474M0R64N4 commented
@leo-yuriev спасибо.
есть ошибка
C2270 't1ha0': modifiers not allowed on nonmember functions
код
void CheckRegistration(std::string RegNumber, bool* b)
{
if (t1ha0(RegNumber, RegNumber, 10376313370251892926) == 7530078511373767546)
{
*b = true;
}
else {
*b = false;
}
}
и еще вылазит такое счастье
't1ha0': none of the 3 overloads could convert all the argument types
erthink commented
В первой группе функций был лишний const
из-за copy-paste.
Про остальное - вам просто нужно освоить C++ и быть внимательным.