Я создал программу. Он работает так, как я хотел, чтобы он работал, но я не понимаю, почему.Почему цикл работает так?
Это функция.
void LiteraMajuscula(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
{
if (i == 0 && str[i] >= 'a' && str[i] <= 'z')
str[i] -= 32;
if (str[i-1] == ' ' && str[i] >= 'a' && str[i] <= 'z')
str[i] -= 32;
i++;
}
}
Предполагается сделать символ нижнего регистра в верхний регистр один каждый раз, когда есть пространство, и только первый один, и если первый символ из строки в нижнем регистре, делает его верхний регистр.
Единственное, что я не понимаю, это str[i-1]
. Я пробовал str[i]
, но ничего не меняет, а str[i-2]
изменяет вторую букву в верхний регистр и верхний регистр вместо первого. Почему это?
'ул [I-1]' не определено поведение (потому что вы начинаете с 'i = 0' – bolov
' str [i-1] == '' 'является UB, если' i == 0' – BLUEPIXY
Да, это должно было быть 'else if', так как первые утверждения if случай i = 0. – Lundin