Я пытаюсь сделать каждый первый капитал слова, но он игнорирует первое слово и переходит на второй. «apple macbook» должен быть «Apple Macbook», но он дает мне «яблочный Macbook». Если я добавлю printf(" %c", toupper(string[0]));
перед циклом for и измените значение p=1
в цикле for, это даст мне правильный результат, но если строка начинается с пробела, то она не удастся. Вот код:C первая буква в верхнем регистре игнорирует первое слово
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char string[] = "apple macbook";
int p;
for(p = 0; p<strlen(string); p++)
{
if(string[p] == ' ')
{
printf(" %c", toupper(string[p+1]));
p++;
}
else
{
printf("%c", string[p]);
}
}
return 0;
}
Очевидно, что код не работает, потому что самая первая буква в строке - это особый случай без пробела перед ним. Вы должны рассматривать этот специальный случай отдельно. Кроме того, вам нужно перебирать от 0 до 'strlen (string) -1', иначе ваша программа всегда будет уничтожать нулевой ограничитель, а затем сбой, когда пробел является последней буквой строки. – Lundin
Вы удивлены? Перед «Яблоком» нет места. –
Вы проверяете пробельный символ в инструкции if. Следующий символ будет преобразован в верхний регистр. Попробуйте 'if (p == 0 || string [p] == '')' –