Skip to main content
 首页 » 编程设计

c++之For 循环中的 While 循环

2024年05月29日26qq78292959

我正在尝试数一串字符串中的猫和狗。所以,

例如:

如果字符串是“cc+dd-cd”,:

我想计算2只阳性猫2只阳性狗1只阴性猫1只阴性狗 (是的,我知道这是一种奇怪的计数方式,但这是我作业的一部分)。

我考虑过做一个 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; 
     } 
}