For 循环中的 While 循环
While Loop in For Loop
我正在尝试数一串中的猫和狗。所以,
例如:
如果字符串是"cc+dd-cd",:
我想数 2 positive cats
、2 positive dogs
、1 negative cat
、1 negative dog
(是的,我知道这是一种奇怪的数数方式,但这是我作业的一部分).
我考虑过做一个 for 循环,在其中迭代字符串,然后嵌套在 for 循环中,我有一个 while 循环 运行 直到 '-',然后 运行 直到一个 '+' 或结束。我开始编写代码,但还没有深入,它就创建了一个无限循环。
问题:如何解决?
谢谢!
string animalparkString = "cc+dd-cd"
for (int k = 0; k != animalparkString.size(); k++)
{
while (k != '-'){
pdc = pdc + 1; //positive dog count
pcc = pcc + 1; //positive cat count
}
while (k != '+') {
ndc = ndc + 1;
ncc = ncc + 1;
}
}
直接的问题是 while
循环检查 k
的值,但不要修改它。因此,一旦你进入其中一个,你就会被无限地卡在那里,因为 k
在循环体内不会改变。
我不会为嵌套循环而烦恼 - 我只是在一个循环中遍历整个字符串,然后依次评估每个字符。完成此操作的一种巧妙方法是保持一种状态,即您是在加法还是减法(根据您上次遇到的是 +
还是 -
符号:
bool positive = true;
string animalparkString = "cc+dd-cd";
for (int k = 0; k < animalparkString.size(); k++) {
char ch = animalparkString[k];
switch (ch) {
case '+':
positive = true;
break;
case '-':
positive = false;
break;
case 'c':
if (positive) {
pcc++;
} else {
ncc++
}
break;
case 'd':
if (positive) {
pdc++;
} else {
ndc++
}
break;
}
}
This post描述迭代所有字符是一个字符串。
这是一个使用现代 C++ 的简单解决方案:
int sign = 1;
int dogs_count = 0, cats_count = 0;
std::string animalparkString = "-cccccc+dddd-cd";
for (const char& ch : animalparkString)
{
switch (ch) {
case '+':
sign = 1;
continue;
case '-':
sign = -1;
continue;
case 'c':
cats_count += sign;
continue;
case 'd':
dogs_count += sign;
continue;
}
}
std::cout <<"dogs: " << dogs_count << " cats: " <<cats_count;
一些帮助您入门的建议:
1.使用在线c++编译器快速测试代码
2. 如果您的代码没有按预期运行,请在 IDE 中使用逐步调试或使用 std::cout
打印我们的变量
3. 明确声明命名空间被认为是好的做法。即:
// preferable:
std::string myString;
// avoid:
using namespace std;
string myString
要使您的代码无需太多更改即可正常工作,您只需将 while()
条件替换为 if()
。此外,您应该比较第 k 个字符串元素 animalparkString[k]
,而不是检查迭代器值 k
。
然后您可能会开始怀疑您编写的代码是否真的按照您的预期进行。您可以尝试回答的可能问题是 "how do I distinguish between positive or negative counts",然后是 "how do I distinguish between cats and dogs "?您可能还需要检查 c
s 和 d
s,而不仅仅是操作符号!
string animalparkString = "cc+dd-cd"
for (int k = 0; k != animalparkString.size(); k++)
{
if(animalparkStrink[k] != '-'){
// Now you know, there will be a pos count. Dog or Cat?
}
if(animalparkString[k] != '+') {
// Now you know, there will be a neg count. Dog or Cat?
}
}
请注意,如果您编写 while( k != '-')
,它的计算结果将始终为真,因此,您将被困在那里。如果是第一次使用 for-loops
,请考虑打印迭代器值,以了解您何时何地被卡住了。
string animalparkString = "cc+dd-cd"
for (int k = 0; k != animalparkString.size(); k++)
{
std::cout << "for-loop iteration number: " << k << std::endl;
if(animalparkStrink[k] != '-'){
// Now you know, there will be a pos count. Dog or Cat?
}
if(animalparkString[k] != '+') {
// Now you know, there will be a neg count. Dog or Cat?
}
}
for
和 while
在一起的方法不必要地复杂。这是一个更简单的解决方案:
#include <concepts>
#include <iostream>
int main() {
auto const& str{"cc+dd-cd"};
std::boolean auto isPositive = 1;
std::integral auto pdc{0}, pcc{0}, ndc{0}, ncc{0};
for (char const ch : str) {
switch (ch) {
case 'c': {
pcc += isPositive;
ncc += !isPositive;
break;
}
case 'd': {
pdc += isPositive;
ndc += !isPositive;
break;
}
case '+': {
isPositive = true;
break;
}
case '-': {
isPositive = false;
break;
}
}
}
std::cout << "pcc: " << pcc << '\n'
<< "ncc: " << ncc << '\n'
<< "pdc: " << pdc << '\n'
<< "ndc: " << ndc << '\n';
}
我正在尝试数一串中的猫和狗。所以,
例如:
如果字符串是"cc+dd-cd",:
我想数 2 positive cats
、2 positive dogs
、1 negative cat
、1 negative dog
(是的,我知道这是一种奇怪的数数方式,但这是我作业的一部分).
我考虑过做一个 for 循环,在其中迭代字符串,然后嵌套在 for 循环中,我有一个 while 循环 运行 直到 '-',然后 运行 直到一个 '+' 或结束。我开始编写代码,但还没有深入,它就创建了一个无限循环。
问题:如何解决?
谢谢!
string animalparkString = "cc+dd-cd"
for (int k = 0; k != animalparkString.size(); k++)
{
while (k != '-'){
pdc = pdc + 1; //positive dog count
pcc = pcc + 1; //positive cat count
}
while (k != '+') {
ndc = ndc + 1;
ncc = ncc + 1;
}
}
直接的问题是 while
循环检查 k
的值,但不要修改它。因此,一旦你进入其中一个,你就会被无限地卡在那里,因为 k
在循环体内不会改变。
我不会为嵌套循环而烦恼 - 我只是在一个循环中遍历整个字符串,然后依次评估每个字符。完成此操作的一种巧妙方法是保持一种状态,即您是在加法还是减法(根据您上次遇到的是 +
还是 -
符号:
bool positive = true;
string animalparkString = "cc+dd-cd";
for (int k = 0; k < animalparkString.size(); k++) {
char ch = animalparkString[k];
switch (ch) {
case '+':
positive = true;
break;
case '-':
positive = false;
break;
case 'c':
if (positive) {
pcc++;
} else {
ncc++
}
break;
case 'd':
if (positive) {
pdc++;
} else {
ndc++
}
break;
}
}
This post描述迭代所有字符是一个字符串。
这是一个使用现代 C++ 的简单解决方案:
int sign = 1;
int dogs_count = 0, cats_count = 0;
std::string animalparkString = "-cccccc+dddd-cd";
for (const char& ch : animalparkString)
{
switch (ch) {
case '+':
sign = 1;
continue;
case '-':
sign = -1;
continue;
case 'c':
cats_count += sign;
continue;
case 'd':
dogs_count += sign;
continue;
}
}
std::cout <<"dogs: " << dogs_count << " cats: " <<cats_count;
一些帮助您入门的建议:
1.使用在线c++编译器快速测试代码
2. 如果您的代码没有按预期运行,请在 IDE 中使用逐步调试或使用 std::cout
打印我们的变量
3. 明确声明命名空间被认为是好的做法。即:
// preferable:
std::string myString;
// avoid:
using namespace std;
string myString
要使您的代码无需太多更改即可正常工作,您只需将 while()
条件替换为 if()
。此外,您应该比较第 k 个字符串元素 animalparkString[k]
,而不是检查迭代器值 k
。
然后您可能会开始怀疑您编写的代码是否真的按照您的预期进行。您可以尝试回答的可能问题是 "how do I distinguish between positive or negative counts",然后是 "how do I distinguish between cats and dogs "?您可能还需要检查 c
s 和 d
s,而不仅仅是操作符号!
string animalparkString = "cc+dd-cd"
for (int k = 0; k != animalparkString.size(); k++)
{
if(animalparkStrink[k] != '-'){
// Now you know, there will be a pos count. Dog or Cat?
}
if(animalparkString[k] != '+') {
// Now you know, there will be a neg count. Dog or Cat?
}
}
请注意,如果您编写 while( k != '-')
,它的计算结果将始终为真,因此,您将被困在那里。如果是第一次使用 for-loops
,请考虑打印迭代器值,以了解您何时何地被卡住了。
string animalparkString = "cc+dd-cd"
for (int k = 0; k != animalparkString.size(); k++)
{
std::cout << "for-loop iteration number: " << k << std::endl;
if(animalparkStrink[k] != '-'){
// Now you know, there will be a pos count. Dog or Cat?
}
if(animalparkString[k] != '+') {
// Now you know, there will be a neg count. Dog or Cat?
}
}
for
和 while
在一起的方法不必要地复杂。这是一个更简单的解决方案:
#include <concepts>
#include <iostream>
int main() {
auto const& str{"cc+dd-cd"};
std::boolean auto isPositive = 1;
std::integral auto pdc{0}, pcc{0}, ndc{0}, ncc{0};
for (char const ch : str) {
switch (ch) {
case 'c': {
pcc += isPositive;
ncc += !isPositive;
break;
}
case 'd': {
pdc += isPositive;
ndc += !isPositive;
break;
}
case '+': {
isPositive = true;
break;
}
case '-': {
isPositive = false;
break;
}
}
}
std::cout << "pcc: " << pcc << '\n'
<< "ncc: " << ncc << '\n'
<< "pdc: " << pdc << '\n'
<< "ndc: " << ndc << '\n';
}