0

この関数に基づいてスコアを計算したり、単語が単語の配列から取得されたりするなど、スコアが最も高い単語をリストする方法を見つけようとしています。どうすればこれに取り組むことができますか?

4

2 に答える 2

1

単語文字列を に配置し、そのベクターでアルゴリズムをstd::vector<std::string>呼び出して、カスタム比較関数を指定して単語を「スコア」で並べ替えることができます。std::sort()

詳細については、次のサンプル コードを参照してください。

#include <algorithm>    // for std::sort
#include <exception>    // for std::exception
#include <iostream>     // for std::cout
#include <stdexcept>    // for std::runtime_error
#include <string>       // for std::string
#include <vector>       // for std::vector
using namespace std;

// NOTE #1: Since this function is *observing* the "word" parameter,
// pass it by const reference (const string & word).
int ScrabbleScore(const string & word) {
    int score = 0;
    static const char scoreTable[26] = { 
        1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 
        5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 
        1, 4, 4, 8, 4, 10 
    };

    for (auto letter : word) {
        // if alphabet word
        if (letter >= 'a' && letter <= 'z') {
            score += scoreTable[letter - 'a'];
        } else {
            // NOTE #2: Throw an exception when an invalid
            // letter is found.
            throw runtime_error("Invalid letter in word.");
        }
    }   
    return score;
}

int main() {
    // Some test words
    vector<string> words = {
        "hi", "hello", "world", "ciao",
        "integer", "sum", "sort", "words"
    };

    // Sort vector by ScrabbleScore (descending order)
    sort(words.begin(), words.end(), 
        [](const string& lhs, const string& rhs) {
            return ScrabbleScore(lhs) > ScrabbleScore(rhs);
        }
    );

    // Print result
    cout << "<word> (<score>)" << endl;
    cout << "------------------" << endl;
    for (const auto & w : words) {
        cout << w << " (" << ScrabbleScore(w) << ")" << endl;
    }
}

出力:

<word> (<score>)
------------------
world (9)
words (9)
hello (8)
integer (8)
ciao (6)
hi (5)
sum (5)
sort (4)
于 2013-09-24T17:45:57.853 に答える