Как вы игнорируете числовой ввод, используя getchar и putchar

Я новичок в программировании на Си. Один из моих вопросов о задании доставляет мне трудности. Вот:

Напишите программу ANSI-C, которая использует getchar() для чтения символов из стандартного ввода и использует putchar() для вывода только символов, пробелов (' ') и символов новой строки во вводе в стандартный вывод. Если буквы строчные, ваша программа должна преобразовать их в прописные. Например, с учетом следующего ввода:

There are 6 apples and 8 oranges, also 9 bananas ...... @ Apple Store!! See you there!?
вывод вашей программы должен быть:
THERE ARE APPLES AND ORANGES ALSO BANANAS APPLE STORE SEE YOU THERE

Я могу получить правильную часть заглавных букв, но мне трудно игнорировать числа и любой другой символ. Любая помощь приветствуется.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int c;

    while ((c=getchar())!=EOF) {
        if ((c>='a' && c<='z'))
            c -= 32;
        else
            while((c==getchar())<'a' || (c==getchar())>'z' ||(c==getchar())!='\n' ||(c==getchar())!=' ');  //This is where I am having trouble.
        putchar(c);
    }
}

3 ответа

Использование isalpha, isspace а также toupper в <ctype.h>как это

while ((c=getchar())!=EOF) {
    if(isalpha(c) || isspace(c))// isspace allow '\t' => c == ' ' || c == '\n'
        putchar(toupper(c));
}

Просто используйте функцию isdigit, чтобы проверить, является ли символ цифрой или нет. Если это не цифра, обработайте ее так, как вы это делаете сейчас. В противном случае, просто проигнорируйте это и попробуйте прочитать другой символ.

Вы можете использовать что-то вроде этого:

char char_filter(char c)
{
    /* lower case letters */
    if (c >= 'a' && c <= 'z')
        return c - ('a' - 'A');

    /* upper case letters*/
    if (c >= 'A' && c <= 'Z')
        return c;

    /* space and new line */
    if (c == ' ' || c == '\n')
        return c;

    /* other characters */
    return 0;
}

Здесь, если функция возвращает ноль, символ должен быть пропущен, иначе он должен быть напечатан putchar:

char c;
while ((c = getchar()) != EOF) {
    if ((c = char_filter(c)))
        putchar(c);
}

Обратите внимание, что есть также стандартные функции int islower(int c), int isupper(int c) а также int isspace(int c), Функция isspace() считает также пространство '\t', '\n' и некоторые другие персонажи.

Другие вопросы по тегам