c++ - 通过搜索单词拼字游戏得分 c++

标签 c++ search

我已经编写了一个代码来获取一个单词的拼字游戏分数,它可以正常工作,没有任何编译错误,但是当我输入一个单词时,它并没有给我正确的拼字游戏分数。

vector <char> scrabbleLetters = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
vector <int> scrabblePoints =   { 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 };

void scrabble(string & search)
{
    
    cout << "You scored " << score(search) << " points for that word!" << endl;
}
int score(string s)
{
    int points = 0;
    int lengths = sizeof(scrabbleLetters) / sizeof(char);
    for (int i = 0; i < s.length(); i++)
    {
        for (int j = 0; j < lengths; j++)
        {
            if (s[i] == scrabbleLetters[j])
                points += scrabblePoints[j];
        }
    }
    return points;
}
void searchs()
{
    string search = "none";
    

    cout << '\n' << "Enter word : " << endl;
    cin >> search;
    scrabble(search);
}
int main()
{
   searchs();
}
当我输入单词函数时,它给我的分数是 11,但应该是 13
Enter word :
function
You scored 11 points for that word!
f=4, u=1, n=1, c=3, t=1, i=1, o=1, n=1 == 13但是对于像gappp这样的东西,上限它给了我正确的分数
我能知道为什么会这样吗

最佳答案

问题是 sizeof 不应该应用于 vector
我复制到 IDE 并运行代码示例。当我在得分中找到循环时

int lengths = sizeof(scrabbleLetters) / sizeof(char);
for (int i = 0; i < s.length(); i++)
{
    for (int j = 0; j < lengths; j++)
    {
        if (s[i] == scrabbleLetters[j])
            points += scrabblePoints[j];
    }
}
我注意到长度是 16,而不是 26。所以 sizeof(a vector) 不是它的有效数据。使用 size因此,代码忽略了 vector 的结尾,而不是为 'u' 或 't' 评分
修正版功能
int score(string s)
{
    int points = 0;
    int lengths = scrabbleLetters.size();
    for (int i = 0; i < s.length(); i++)
    {
        for (int j = 0; j < lengths; j++)
        {
            if (s[i] == scrabbleLetters[j])
                points += scrabblePoints[j];
        }
    }
    return points;
}
将两个数组分开不如将它们绑定(bind)在一起......创建一个结构来保存信息,例如具有该值的图 block 数量可能会很有用。这是一张替代 map ,可为您提供一些线索。
std::map< char, int > scrabbleMap = {
    { 'a', 1},
    { 'b', 3 },
    { 'c', 3 },
    { 'd', 2 },
    { 'e', 1 },
    { 'f', 4 },
    { 'g', 2 },
    { 'h', 4 },
    { 'i', 1 },
    { 'j', 8 },
    { 'k', 5 },
    { 'l', 1 },
    { 'm', 3 },
    { 'n', 1 },
    { 'o', 1 },
    { 'p', 3 },
    { 'q', 10 },
    { 'r', 1 },
    { 's', 1 },
    { 't', 1 },
    { 'u', 1 },
    { 'v', 4 },
    { 'w', 4 },
    { 'x', 8 },
    { 'y', 4 },
    { 'z', 10 }
};


int score(string s)
{
    int points = 0;
    for (int i = 0; i < s.length(); i++)
    {
        auto res = scrabbleMap.find(s[i]);
        if (res != scrabbleMap.end()) {
            points += res->second;
        }
    }
    return points;
}
替代分数显示了如何更快地在 map 上进行搜索。

关于c++ - 通过搜索单词拼字游戏得分 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63868870/

相关文章:

search - ElasticSearch不返回结果

java - 如何在List中查找元素?

c++ - 如何将 Objective C 的类实例传递给 C++ 方法?

ios - Firebase 查询(在 swift 中)确定数据库中是否已存在用户名

Python逐行检查列表

c++ - 函数无法解析 c++

在 plone 中搜索自定义类型

c++ - OpenGL很顽固,不允许纹理映射

c++ - 并行使用 Eigen BICGSTAB 求解稀疏矩阵

c++ - C和C++相对于一元算术运算符存在差异的原因是什么 +