试图编写将录制输入字符串和"缩写"的代码。例如,如果给出了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