Использование другой библиотеки в C - PullRequest
0 голосов
/ 26 января 2012

Я только что с нуля запрограммировал программу, которая считала бы заглавные и строчные буквы и пробелы, независимо от того, что вводил пользователь.С тех пор я узнал, что код для этих конкретных функций уже был написан в другой библиотеке!У меня вопрос, как можно упростить весь код, который я написал ниже, с использованием

isupper(int c), islower(int c) и isspace(int c), которые определены в ctype.h.

#include <stdio.h>

int main(void){
int iochar, numdigits=0, numlower=0, numupper=0, numwhites=0;

printf("Please enter a phrase:\n\n");

while((iochar=getchar())!=EOF) 
{
    if ((iochar==' ')||(iochar=='\t')||(iochar=='\n'))
    {
        numwhites++;
        putchar(iochar);
    }
    else 
        if((iochar>='0')&&(iochar<='9')) 
        {
            numdigits++;
            putchar(iochar);
        }
        else 
            if(('a'<=iochar)&&(iochar<='z')) 
            {
                numlower++;
                putchar(iochar-32);
            } 
            else 
                if(('A'<=iochar)&&(iochar<='Z'))
                {
                    numupper++;
                    putchar(iochar);
                }
                else 
                    putchar(iochar);    
}

printf("%d white characters, %d digits, ",numwhites,numdigits);
printf("%d lowercase have been converted to ",numlower);
printf("uppercase and %d uppercase.\n",numupper);

printf("\n\n");


return 0;}

Ответы [ 2 ]

5 голосов
/ 26 января 2012

Вот это написано лучше и убрано:

#include <stdio.h>
#include <ctype.h>

int main(int argc, char **argv) {
    int iochar, numdigits=0, numlower=0, numupper=0, numwhites=0;

    printf("Please enter a phrase:\n\n");

    while ((iochar=getchar()) != EOF) {
        // increase counts where necessary
        if (isspace(iochar)) {
            numwhites++;
        } else if (isdigit(iochar)) {
            numdigits++;
        } else if (islower(iochar)) {
            numlower++;
            iochar = toupper(iochar);
        } else if (isupper(iochar)) {
            numupper++;
        }

        // this happens always, don't put it in the if's
        putchar(iochar);
    }

    printf("%d white characters, %d digits, ", numwhites, numdigits);
    printf("%d lowercase have been converted to ", numlower);
    printf("uppercase and %d uppercase.\n", numupper);

    printf("\n\n");

    return 0;
}
1 голос
/ 26 января 2012

Просто #include <ctype.h> и затем измените, например,

if((iochar==' ')||(iochar=='\t')||(iochar=='\n'))

до

if (isspace(iochar))

и т.д.

Для получения полной информации см. man ctype .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...