【发布时间】:2020-12-29 14:14:09
【问题描述】:
我目前在 WGU 上 C++ 开发课程,我收到了一个基于 Simon Says 的练习。基本上,simonPattern 是一个由 10 个字符(R、G、B、Y)组成的字符串,userInput 将是游戏每一步的输入。这一章是关于break 和continue 语句的,但练习没有提供关于使用哪种语句的任何输入(if、while、for)。我尝试了几种不同的方法来编写它,但本书练习中的编译器不允许更多 #include 语句,我最终通过了以下内容:
#include <iostream>
#include <string>
using namespace std;
int main() {
string simonPattern;
string userPattern;
int userScore = 0;
int i = 0;
userScore = 0;
simonPattern = "RRGBRYYBGY";
userPattern = "RRGBBRYBGY";
char simonPattern0 = simonPattern[0];
char simonPattern1 = simonPattern[1];
char simonPattern2 = simonPattern[2];
char simonPattern3 = simonPattern[3];
char simonPattern4 = simonPattern[4];
char simonPattern5 = simonPattern[5];
char simonPattern6 = simonPattern[6];
char simonPattern7 = simonPattern[7];
char simonPattern8 = simonPattern[8];
char simonPattern9 = simonPattern[9];
char userPattern0 = userPattern[0];
char userPattern1 = userPattern[1];
char userPattern2 = userPattern[2];
char userPattern3 = userPattern[3];
char userPattern4 = userPattern[4];
char userPattern5 = userPattern[5];
char userPattern6 = userPattern[6];
char userPattern7 = userPattern[7];
char userPattern8 = userPattern[8];
char userPattern9 = userPattern[9];
for (i = 0; i < 2; ++i) {
if (simonPattern0 == userPattern0) {
userScore = ++userScore;
}
if (simonPattern0 != userPattern0) {
break;
}
if (simonPattern1 == userPattern1) {
userScore = ++userScore;
}
if (simonPattern1 != userPattern1) {
break;
}
if (simonPattern2 == userPattern2) {
userScore = ++userScore;
}
if (simonPattern2 != userPattern2) {
break;
}
if (simonPattern3 == userPattern3) {
userScore = ++userScore;
}
if (simonPattern3 != userPattern3) {
break;
}
if (simonPattern4 == userPattern4) {
userScore = ++userScore;
}
if (simonPattern4 != userPattern4) {
break;
}
if (simonPattern5 == userPattern5) {
userScore = ++userScore;
}
if (simonPattern5 != userPattern5) {
break;
}
if (simonPattern6 == userPattern6) {
userScore = ++userScore;
}
if (simonPattern6 != userPattern6) {
break;
}
if (simonPattern7 == userPattern7) {
userScore = ++userScore;
}
if (simonPattern7 != userPattern7) {
break;
}
if (simonPattern8 == userPattern8) {
userScore = ++userScore;
}
if (simonPattern8 != userPattern8) {
break;
}
if (simonPattern9 == userPattern9) {
userScore = ++userScore;
}
if (simonPattern9 != userPattern9) {
break;
}
}
cout << "userScore: " << userScore << endl;
return 0;
}
虽然这确实通过了对 simonPattern 和 userPattern 的几个不同分配的测试,但我不禁觉得这是纯粹的蛮力,考虑到只有 @987654332 的限制,本可以用更少的代码编写@ 和 <string>。我也知道if 链,但是当我尝试for 和while 时,它会抛出错误。
【问题讨论】:
-
如果您每次都运行完全相同的东西,那么将所有这些 if 放入 for 循环有什么意义?我认为你开始尝试迭代字符串,但它没有用,所以你求助于这个。你知道如何用 for 循环遍历字符串吗?
-
看看 for 循环的行为.. 详细阅读
-
将所有字符放入自己的变量中是您的第一个错误。在您执行
simonPattern0 == userPattern0之类的操作时,您可以改用simonPattern[0] == userPattern[0]。然后考虑您可以将0替换为一个变量,该变量可以是for循环的计数器(例如for(int j = 0; j < simonPattern.size(); ++j))。 -
if(x == y) {} if (x != y) {}可以只是if (x == y) {} else {}如果x和y在第一个分支中没有被修改。
标签: c++ string string-comparison