我已经编写了一个代码来获取一个单词的拼字游戏分数,它可以正常工作,没有任何编译错误,但是当我输入一个单词时,它并没有给我正确的拼字游戏分数。
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,但应该是 13Enter 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/