2014-01-22 3 views
1

У меня есть этот код C. Если я нахожу LOL123, он должен показать, что он имеет верхний регистр. И lol123 это в нижнем регистре. Как использовать isalpha для исключения нечислового ввода при проверке isupper или ниже?проверка, является ли символ верхним или нижним регистром в алфавитно-цифровом

#include <stdio.h> 

#define SIZE 6 
char input[50]; 
int my_isupper(char string[]); 

int main(){ 
    char input[] = "LOL123"; 
    int m; 

    m= isupper(input); 
    if(m==1){ 
     printf("%s is all uppercase.\n", input); 
    }else 
     printf("%s is not all uppercase.\n", input); 

    return 0; 
} 

int my_isupper(char string[]){ 
    int a,d; 

    for (a=0; a<SIZE); a++){ 
     d= isupper(string[a]) ; 
    } 

    if(d != 0) 
     d=1; 

    return d; 
} 
+3

насчет Lol123, loL123, lOl123 ... – rullof

+0

Основываясь на отпечатках в коде, тем бы все рассматривать не в верхнем регистре. Кажется, что искатель заботится о том, что слово все в верхнем регистре или нет. – StephenTG

+0

ответ

1

Для прописной функции просто цикл корыта строки и если символ нижнего регистра является encountred вы возвращаетесь false как значение. И не используйте имена имен стандартных библиотек, чтобы назвать свои собственные функции. Вместо этого используйте isUpperCase.

Демо: https://eval.in/93429

#include <stdio.h> 
#include <string.h> 

int isUpperCase(const char *inputString); 

int main(void) 
{ 
    char inputString1[] = "LOL123"; 
    char inputString2[] = "lol123"; 
    printf("%s is %s\n", inputString1, isUpperCase(inputString1)?"upper-case":"not upper-case"); 
    printf("%s is %s\n", inputString2, isUpperCase(inputString2)?"lower-case":"not upper-case"); 
    return 0; 
} 

int isUpperCase(const char *inputString) 
{ 
    int i; 
    int len = strlen(inputString); 
    for (i = 0; i < len; i++) { 
     if (inputString[i] >= 'a' && inputString[i] <= 'z') { 
      return 0; 
     } 
    } 
    return 1; 
} 
+0

. Примечание: стандарт не гарантирует ордера на свойство * sequential * символов numeric-eval * except *' '0' ... '9'' , Хотя это будет «работать» на платформах ascii (и даже EBCDIC), это не стандарт. – WhozCraig

+0

Итак, нет способа найти, если входной сигнал имеет верхний или нижний регистр, используя только isalpha(), islower() и isupper()? –

+0

Функции функции xhonmayanranger ctype также работают только с ascii. – rullof

0
char c = ...; 
if (isalpha(c)) 
{ 
    // do stuff if it's alpha 
} else { 
    // do stuff when not alpha 
} 
2
int my_isalpha_lower(int c) { 
    return ((c >= 'a' && c <= 'z')); } 

int my_isalpha_upper(int c) { 
     return ((c >= 'A' && c <= 'Z')); } 

int isdigit(int c) { 
     return (c >= '0' && c <= '9'); } 



while (*s) { 

    if (!is_digit(*s) && !my_isalpha_lower(*s)) 
    { 
     //isnot lower but is alpha 
    } 
    else if (!is_digit(*s) && !my_alpha_upper(*s)) 
    { 
     //is not upper but is alpha 
    } 

    s++; 

} 
0

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

еще несколько наблюдений:

  • Не используйте имя стандартной функции для собственных.
  • Массивы распадаются на указатели, когда они используются в качестве параметров функции. У вас нет возможности автоматически определять размер массива.
  • Ожидается, что ваше возвращение от isupper будет логическим. Тестирование, которое снова с ==1 имеет мало смысла.
  • У вас есть две разные переменные: input, одна в области файлов, одна в main.
0

довольно просто:

#include <ctype.h> 

/** 
* Will return true if there's at least one alpha character in 
* the input string *and* all alpha characters are uppercase. 
*/ 
int allUpper(const char *str) 
{ 
    int foundAlpha = 0;     
    int upper = 1; 

    for (const char *p = str; *p; p++) 
    { 
    int alpha = isalpha(*p);   
    foundAlpha = foundAlpha || alpha;  
    if (alpha) 
     upper = upper && isupper(*p);  
    } 

    return foundAlpha && upper; 
} 
Смежные вопросы