Как проверить, является ли строка буквой (az или AZ) в c

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

Под буквами я подразумеваю: A-Z, a-z.

int main(){
    char buffer[20];
    int integer; 
    printf("Enter expression: ");
    while (fgets(buffer, sizeof(buffer), stdin) != NULL){
        char *p = strchr(buffer, '\n'); //take care of the new line from fgets
        if (p) *p = 0;

        //Buffer will either be a integer, an operator, or a variable (letter).
        //I would like a way to check if it is a letter
        //I am aware of isalpha() but that requires a char and buffer is a string

         //Here is how I am checking if it is an integer
         if (sscanf(buffer, "%d", &integer) != 0){
             printf("Got an integer\n");
         }
         else if (check if letter)
             // need help figuring this out
         } 
         else{
             // must be an operator
         }
    }
}

person Talen Kylon    schedule 10.11.2013    source источник
comment
Кстати: если вы введете только пробелы, (sscanf(" ", "%d", &integer) даст -1 и пройдет ваш тест Got a integer\n. Рекомендовать в будущем использовать утвердительные sscanf() сравнительные тесты, такие как sscanf(buffer, "%d", &integer) == 1 для sscanf(..., "%d",...), которые могут возвращать 0, 1 или EOF.   -  person chux - Reinstate Monica    schedule 15.11.2013


Ответы (2)


Вы можете использовать стандартные функции isalpha() и isdigit(). Просто включите <ctype.h>.

     if (isdigit(integer)) != 0){
         printf("Got an integer\n");
     }
     else if (isalpha(integer))
         printf"Got a char\n"); 
     } 
     else{
         // must be an operator 
     }
person Giuseppe Pes    schedule 10.11.2013
comment
Спасибо за предложение, но как изменить буфер на целое число? - person Talen Kylon; 11.11.2013
comment
просто используйте первый символ буфера и приведите его к int. - person Giuseppe Pes; 11.11.2013

Чтобы узнать, является ли ввод буква или цифра:

  • int isalpha ( int c );, чтобы проверить, является ли c буквой алфавита.
  • int isalnum ( int c );, чтобы проверить, является ли c десятичной цифрой или прописной или строчной буквой.
  • int isdigit ( int c );, чтобы проверить, является ли c десятичным цифровым символом.

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

  • int islower ( int c );, чтобы проверить, является ли c строчной буквой: a-z
  • int isupper ( int c );, чтобы проверить, является ли c прописной буквой: A-Z

Поместите их в операторы if, которые что-то делают (true или false), в зависимости от результата.

PS Подробнее о стандартной библиотеке можно узнать здесь: Функции обработки символов: ctype .ч

person yulian    schedule 10.11.2013