Für meine Programmierklasse, ich versuche, eine Funktion incrementString() schreiben, die die Zeichenfolge "Str" von einem Treiber übergeben, und fügt eins zu ihnen. Es sollte mit Buchstaben und Zahlen funktionieren (zB "1" geht mit "2", "a" mit "b", "z" mit "aa", "ZZ" mit "AAA"). Ich habe fast alle Testbedingungen, bis auf einen Fehler, den ich nicht finden kann.String Inkrementierende Funktion in C
Das ist, was ich habe zur Zeit:
void incrementstring(char* str){
int i;
int j;
int length = strlen(str);
for(i = strlen(str)-1; i >= 0; i--){
if (str[i] == '9'){
str[i] = '0';
if (str[0] == '0'){
for (j = strlen(str)-1; j>=0; j--){ //This loop is the problem
str[j+1] = str[j];
}
str[0] = '1';
}
}
else if (str[i] == 'z'){
if (str[0] == 'z'){
str[i] = 'a';
str[i+1] = 'a';
}
str[i] = 'a';
}
else if (str[i] == 'Z'){
if(str[0] == 'Z'){
str[i] = 'A';
str[i+1] = 'A';
}
str[i] = 'a';
}
else{
str[i]++;
return;
}
}
}
Wenn ich die Funktion ausführen, das, was gibt die Treiber:
1. testing "1"... = 2. Correct!
2. testing "99"... = 100. Correct!
3. testing "a"... = b. Correct!
4. testing "d"... = e. Correct!
5. testing "z"... = INCORRECT: we got "aa0". We should be getting "aa" instead.
6. testing "aa"... = ab. Correct!
7. testing "Az"... = Ba. Correct!
8. testing "zz"... = aaa. Correct!
9. testing "cw"... = cx. Correct!
10. testing "tab"... = tac. Correct!
11. testing "500"... = 501. Correct!
11 tests run.
ich eine for-Schleife in Zeile 9 schrieb "zu handhaben die 99 'bis' 100 'Zustand. Es nimmt jeden Index der Zeichenfolge und verschiebt es nach rechts, und fügt dann eine '1' an den Anfang der Zeichenfolge. Diese Schleife bringt jedoch aus irgendeinem Grund die fünfte Testbedingung durcheinander, wie oben zu sehen ist. Wenn ich die Schleife herausnehme, wird "99" auf "00" gehen, aber der 5. Test wird ohne Probleme bestehen. Ich habe hier eine Mauer getroffen und ich habe mich gefragt, ob irgendjemand einen Einblick geben kann.
Ich schätze die Hilfe, danke.
Nach Ihrem "Übertrag" (dh, wenn Sie die "Zeichenfolge" erweitern), müssen Sie ein NUL-Abschlussbyte im Array hinzufügen. Alle 'str [i + 1] =' sollten nach ihnen ein 'str [i + 2] = '\ 0' haben. Sie erkennen auch, dass Sie ASCII-Zeichensatz annehmen, richtig? Oder ist diese Rücksichtnahme über den Rahmen der Klasse hinaus? – mpez0
Die Verwendung eines Debuggers könnte auch hier hilfreich sein. –
Ihr "carry" funktioniert nicht in allen Fällen: Versuchen Sie 'zaz' einzugeben - Das sollte sich in 'zba' umwandeln, wenn ich Ihre Anforderung richtig habe, aber zu 'zaaa' erweitert wird. Du versäumst es, deinen "Carry" ganz nach oben zu übertragen, sondern nur in den führenden Char. – tofro