Как вы игнорируете числовой ввод, используя 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'
и некоторые другие персонажи.