如何使用调整后的字符串索引第二次通过循环运行字符串



试图编写将录制输入字符串和"缩写"的代码。例如,如果给出了AABB,则输出应为BC。基本上,如果有任何双字母,它将升至字母内的下一个字母,因此AA = B等。这对于第一次运行良好,但直到完成才能通过。如果给定的字符串为AAAA,则输出应为C,而代码输出BB则应。如何调整代码以运行字符串适当的次数?

string abbreviate (string loc){
int loopCount;
sort(loc.begin(), loc.end());
for ( unsigned int i = 0; i < loc.length() ; i++){

    if(loc[i] == loc[i+1]) {
        if(loc[i] == 'a'){
            loc[i] = 'b';
            loc[i+1] = 0;
        }else if(loc[i] == 'b'){
            loc[i] ='c';
            loc[i+1]= 0;
        }else if(loc[i] == 'c'){
            loc[i] ='d';
            loc[i+1]= 0;
        }else if(loc[i] == 'd'){
            loc[i] = 'e';
            loc[i+1]= 0;
        }else if(loc[i] == 'e'){
            loc[i] ='f';
            loc[i+1]= 0;
        }else if(loc[i] == 'f'){
            loc[i] ='g';
            loc[i+1]= 0;
        }else if(loc[i] == 'g'){
            loc[i] ='h';
            loc[i+1]= 0;
        }else if(loc[i] == 'h'){
            loc[i] ='i';
            loc[i+1]= 0;
        }else if(loc[i] == 'i'){
            loc[i] ='j';
            loc[i+1]= 0;
        }else if(loc[i] == 'j'){
            loc[i] ='k';
            loc[i+1]= 0;
        }else if(loc[i] == 'k'){
            loc[i] ='l';
            loc[i+1]= 0;
        }else if(loc[i] == 'l'){
            loc[i] ='m';
            loc[i+1]= 0;
        }else if(loc[i] == 'm'){
            loc[i] ='n';
            loc[i+1]= 0;
        }else if(loc[i] == 'n'){
            loc[i] ='o';
            loc[i+1]= 0;
        }else if(loc[i] == 'o'){
            loc[i] ='p';
            loc[i+1]= 0;
        }else if(loc[i] == 'p'){
            loc[i] ='q';
            loc[i+1]= 0;
        }else if(loc[i] == 'q'){
            loc[i] ='r';
            loc[i+1]= 0;
        }else if(loc[i] == 'r'){
            loc[i] ='s';
            loc[i+1]= 0;
        }else if(loc[i] == 's'){
            loc[i] ='t';
            loc[i+1]= 0;
        }else if(loc[i] == 't'){
            loc[i] ='u';
            loc[i+1]= 0;
        }else if(loc[i] == 'u'){
            loc[i] ='v';
            loc[i+1]= 0;
        }else if(loc[i] == 'w'){
            loc[i] ='x';
            loc[i+1]= 0;
        }else if(loc[i] == 'x'){
            loc[i] ='y';
            loc[i+1]= 0;
        }else if(loc[i] == 'y'){
            loc[i] ='z';
            loc[i+1]= 0;
        }

    }
}
return loc;
}

您可以拥有一个嵌套循环,并具有可变检查是否在上次循环迭代中发生了变化。例如,您的代码看起来与此相似:

// Pseudocode
bool changed = true; // This will keep track if previous loop has changed any values
while (changed) {
    changed = false; // Set to false at beginning of loop
    for (size_t i = 0; i < stringLength; ++i) {
        if (/*two same characters in a row*/) {
            // Change character to the next one in the alphabet
            changed = true; // This will indicate the outer loop to run again
        }
    }
}

这样,只有在所有同意字符都已更改时,该程序才会停止。

您的代码中还有其他一些问题,例如索引错误,这是我如何实现您的功能的一个示例:https://wandbox.org/permlink/permlink/n0hk8sopneo6izv7

最新更新