Для моего класса программирования я пытаюсь написать функцию incrementstring(), которая берет строку 'str', переданную из драйвера, и добавляет ее к ней. Он должен работать как с буквами, так и с числами (например, «1» переходит в «2», «a» переходит в «b», «z» переходит в «aa», «ZZ» переходит в «AAA»). У меня почти все условия тестирования, за исключением одной ошибки, с которой я не могу найти пути.Функция увеличения строки в C
Это то, что я в настоящее время:
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;
}
}
}
При запуске функции, это то, что выходы драйвера:
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.
Я написал цикл в строке 9, чтобы обрабатывать " 99 'до' 100 '. Он принимает каждый индекс строки и сдвигает ее вправо, а затем добавляет «1» к началу строки. Однако этот цикл по какой-то причине испортил пятое тестовое условие, как видно выше. Если я выберу петлю, «99» перейдет к «00», но пятый тест пройдет без проблем. Я ударил кирпичную стену здесь, и мне было интересно, может ли кто-нибудь дать представление.
Я ценю помощь, спасибо.
После вашего «переноса» (то есть, когда вы расширяете «строку»), вам нужно добавить байт NUL для завершения в массиве. Все 'str [i + 1] =' должны иметь 'str [i + 2] = '\ 0';' после них. Вы также понимаете, что принимаете набор символов ASCII, правильно? Или это рассмотрение выходит за рамки класса? – mpez0
Использование отладчика также может быть полезно здесь. –
Ваш «перенос» на самом деле не работает во всех случаях: попробуйте ввести «zaz» - это должно трансформироваться в «zba», если я правильно понял ваше требование, но расширяется до «zaaa». Вы не можете перенести свой «перенос» на весь путь, а только взгляните на главный символ. – tofro