c++ - 问题比较答案键的字符串 (C++)
问题描述
我正在为我的编码课程做一个中期项目,虽然我已经解决了大部分问题,但我正在努力比较两个字符串值并确定它们是否相等。有问题的字符串是ANSWERKEY
和studentAnswers
。前者是与后者进行比较的常数。
有问题的代码如下。
if (studentAnswers == ANSWERKEY)
{
percentScore = 100.0;
cout << "Score: " << percentScore << " % " << 'A' << endl;
}
else if (studentAnswers != ANSWERKEY)
{
int count = 0;
double answerCount = 0.0;
while (count < ANSWERKEY.length())
{
if (studentAnswers.substr(count, count+1) == ANSWERKEY.substr(count, count+1)
{
answerCount++;
count++;
}
else
{
cout << "Incorrect answer." << endl;
count++;
}
}
percentScore = ((answerCount) / (double)ANSWERKEY.length()) * 100.0;
cout << "Percent score is " << percentScore << "%" << endl;
}
我面临的确切问题是我无法找到更好的方法来比较字符串。使用当前方法,输出如下:
代码介绍运行良好。只有当我根据密钥(在本例中为“abcdefabcdefabcdefab”)检查答案时,我才会遇到问题。无论更改了哪些字符,程序都会将大约一半的字符标记为不匹配,并因此降低分数。
我曾想过使用一对数组,但是当它的某些值为空时,我找不到设置数组的解决方案。如果学生的答案太短,例如只有 15 个字符长,我不知道如何比较空格,甚至将其存储在数组中。
感谢您提供的任何帮助。
解决方案
第一的:
if (studentAnswers == ANSWERKEY)
{...}
else if (studentAnswers != ANSWERKEY)
{ ...}
比较字符串时看起来有点矫枉过正。零件在哪里else
?
其次,这是有风险的。阅读IEE754和有关取消甚至SO的文章:
double answerCount = 0.0;
...
answerCount++
第三:
您正在使用 substr 逐个字符地检查。对我来说,感觉就像用锤子杀死细菌。
studentAnswers.substr(count, count+1) == ANSWERKEY.substr(count, count+1)
第四:
如果studentAnswers
比 短ANSWERKEY
怎么办?
结论:您需要澄清输入/预期输出并使用调试器更好地了解执行期间发生的情况。在程序的每个步骤中仔细检查所有变量。
推荐阅读
- node.js - 移动平均聚合MongoDB
- vue.js - Vue.js & D3.js - 当用户点击 svg 元素时尝试调用 Vue 方法,但它抛出了一个错误
- terraform - 使用模块无法从 terraform_remote_state 获取 vpc_id 以用于其他模块
- data-structures - 有人可以从 Judy 数据结构文档中解释这一行吗?
- automapper - 自动映射到多个子类型
- c# - Microsoft Graph 无效筛选子句
- json - JQ 根据条件删除条目
- sql - 试图找出 OPENJSON 查询的语法并卡住了
- android - CoordinatorLayout 中的 RecyclerView 在数据更改时滚动到顶部
- javascript - 将 React 应用程序的一部分弹出到新窗口中