比较两个字符串的每个字符。新的和寻找输入
Compare each character of two strings. New and looking for input
我目前在 WGU 参加 class 的 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
的几个不同分配的测试,但我不禁觉得这是纯粹的蛮力,考虑到可以用更少的代码编写只有 <iostream>
和 <string>
的限制。我也知道 if
链,但是当我尝试 for
和 while
时它会抛出错误。
您不需要所有这些变量 — 您已经有了数组!数组的美妙之处在于您可以使用其他变量对其进行索引,这使您可以将所有重复的逻辑折叠到另一个循环中。
你的程序可以这样写:
#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";
for (i = 0; i < 2; ++i) {
bool stop = false;
for (int j = 0; j < 10; j++) {
if (simonPattern[j] == userPattern[j]) {
userScore = ++userScore;
}
else {
stop = true;
break;
}
}
if (stop)
break;
}
cout << "userScore: " << userScore << endl;
return 0;
}
不可否认,必须引入 bool stop
才能从内循环中跳出外循环,这有点麻烦。但是我们可以通过将逻辑分解到一个函数中来解决这个问题,我们可以从中简单地 return
当我们想要的时候:
#include <iostream>
#include <string>
using namespace std;
int calculateUserScore(const string& simonPattern, const string& userPattern) {
int userScore = 0;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 10; j++) {
if (simonPattern[j] == userPattern[j])
++userScore;
else
return userScore;
}
}
return userScore;
}
int main() {
string simonPattern = "RRGBRYYBGY";
string userPattern = "RRGBBRYBGY";
cout << "userScore: " << calculateUserScore(simonPattern, userPattern) << endl;
}
请注意,为了更加简洁,我还将您的初始分配移到了初始化中,并删除了 main
中多余的 return 0
。 userScore = ++userScore
还包含一个冗余; ++
已经执行了递增,无需重新分配执行该操作的结果。
最后,我不知道 i < 2
循环的目的是什么:为什么要执行两次?确保你真的打算这样做。
我目前在 WGU 参加 class 的 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
的几个不同分配的测试,但我不禁觉得这是纯粹的蛮力,考虑到可以用更少的代码编写只有 <iostream>
和 <string>
的限制。我也知道 if
链,但是当我尝试 for
和 while
时它会抛出错误。
您不需要所有这些变量 — 您已经有了数组!数组的美妙之处在于您可以使用其他变量对其进行索引,这使您可以将所有重复的逻辑折叠到另一个循环中。
你的程序可以这样写:
#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";
for (i = 0; i < 2; ++i) {
bool stop = false;
for (int j = 0; j < 10; j++) {
if (simonPattern[j] == userPattern[j]) {
userScore = ++userScore;
}
else {
stop = true;
break;
}
}
if (stop)
break;
}
cout << "userScore: " << userScore << endl;
return 0;
}
不可否认,必须引入 bool stop
才能从内循环中跳出外循环,这有点麻烦。但是我们可以通过将逻辑分解到一个函数中来解决这个问题,我们可以从中简单地 return
当我们想要的时候:
#include <iostream>
#include <string>
using namespace std;
int calculateUserScore(const string& simonPattern, const string& userPattern) {
int userScore = 0;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 10; j++) {
if (simonPattern[j] == userPattern[j])
++userScore;
else
return userScore;
}
}
return userScore;
}
int main() {
string simonPattern = "RRGBRYYBGY";
string userPattern = "RRGBBRYBGY";
cout << "userScore: " << calculateUserScore(simonPattern, userPattern) << endl;
}
请注意,为了更加简洁,我还将您的初始分配移到了初始化中,并删除了 main
中多余的 return 0
。 userScore = ++userScore
还包含一个冗余; ++
已经执行了递增,无需重新分配执行该操作的结果。
最后,我不知道 i < 2
循环的目的是什么:为什么要执行两次?确保你真的打算这样做。