Измените каждый другой альфа-символ в строке на верхний регистр, используя C

Кто-нибудь любезно направит меня в правильном направлении со следующим кодом, который я написал. В основном я пытаюсь, чтобы каждый второй символ в строке печатался заглавной буквой, не принимая во внимание пробелы или другие не альфа-символы.

пример: string input = "спасибо за добавление" должно быть напечатано как "СПАСИБО ЗА ДОБАВЛЕНИЕ"

int main (void) 
{
    char* input = GetString();
    if (input == NULL)
        return 1;
    for (int i = 0, x = strlen(input); i < x; i+=2)
        input [i] = toupper(input[i]);
    printf("%s\n", input);
    return 0;
}

примечание: я новичок в информатике и в настоящее время прохожу курс CS50x через edx.org.


person user2153167    schedule 19.03.2013    source источник


Ответы (2)


Просто используйте isalpha, чтобы игнорировать другие типы символов:

#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main (void) 
{
    char input[] = "thanks for the add";
    int  alpha_count = 0;
    for (int i = 0, x = strlen(input); i < x; i++) {
      if (isalpha(input[i])) {
        if (alpha_count++ % 2 == 0 ) 
          input [i] = toupper(input[i]);
      }   
    }   
    printf("%s\n", input);
    return 0;
}
person perreal    schedule 19.03.2013
comment
Почему необходимо звонить isalpha? Если я правильно помню, функция toupper изменяет символ только в том случае, если его можно преобразовать в верхний регистр (т. е. если это буквенный символ). В противном случае он оставляет его без изменений. - person Cody Gray; 19.03.2013
comment
Поскольку OP хочет чередовать символы uc/lc с символами alpa, оператор if защищает счетчик. В противном случае пробел также запускает счетчик чередования. - person perreal; 19.03.2013
comment
благодарю вас. Я потратил на это больше времени, чем хочу признать. Использование модуля - это то, чего мне не хватало. - person user2153167; 19.03.2013

person    schedule
comment
Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. правильное объяснение значительно улучшит его долгосрочную ценность, показав, почему это хорошее решение проблемы и сделать его более полезным для будущих читателей с другими, похожими вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения. - person Donald Duck; 14.12.2017