Задать вопрос
@artem0011011000111001

Как сделать алгоритм превращение цифр словами в цифры?

У меня есть алгоритм который принимает вектор строк где строки это цифры английскими словами и возвращает нужную получившуюся цифру. Вот его код
using string_t = std::string;

int tokens_to_int(const std::vector<string_t>& s) {
    const std::unordered_map<string_t, int> word_to_value = {
        {"one", 1}, {"two", 2}, {"three", 3}, {"four", 4}, {"five", 5},
        {"six", 6}, {"seven", 7}, {"eight", 8}, {"nine", 9}, {"ten", 10},
        {"eleven", 11}, {"twelve", 12}, {"thirteen", 13}, {"fourteen", 14},
        {"fifteen", 15}, {"sixteen", 16}, {"seventeen", 17}, {"eighteen", 18},
        {"nineteen", 19}, {"twenty", 20}, {"thirty", 30}, {"fourty", 40},
        {"fifty", 50}, {"sixty", 60}, {"seventy", 70}, {"eighty", 80},
        {"ninety", 90}
    };

    const std::unordered_map<string_t, int> scale_words = {
        {"hundred", 100}, {"thousand", 1000}, {"million", 1000000}, {"billion", 1000000000}
    };

    int scale = 1;
    int rv = 0;

    for (auto it = s.rbegin(); it != s.rend(); ++it) {
        const string_t& cw = *it;

        auto value_it = word_to_value.find(cw);
        if (value_it != word_to_value.end()) {
            rv += value_it->second * scale;
            continue;
        }

        auto scale_it = scale_words.find(cw);
        if (scale_it != scale_words.end()) {
            scale *= scale_it->second;
        }
    }

    return rv;
}

и теперь мне нужен алгоритм который принимает вектор строк в котором тоже строки это слова, но в этом случае это все и цифры и обычные слова. Он должен находить слова которые подходят к алгоритму tokens_to_int и добавлять их в массив и потом передавать его туда, я очень долго пытался сделать этот алгоритм, но у меня была самая большая проблема что если есть несколько чисел подряд например "four thirty one" то оно их всех брало и плюсовало и возвращало 35 хотя должно было 4 31.
Может кто-нибудь помочь?
  • Вопрос задан
  • 103 просмотра
Подписаться 1 Простой 13 комментариев
Пригласить эксперта
Ответы на вопрос 1
@66demon666
Сетевой админ, АТС-админ
Понятно, надеюсь вы справитесь с этой задачей
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы