niedziela, 6 marca 2016

C - Funkcje do identyfikacji znaku

W tym poście chciałbym opisać szereg funkcji, które sprawdzają czy dany znak jest konkretnym elementem. Zostały one zdefiniowane w bibliotece ctype.h. Aby z nich korzystać należy ją oczywiście uwzględnić w nagłówku programu.

Poniżej przedstawiam ich wykaz wraz z opisem zastosowania. Definicja ich jest podobna różnica występuje tylko w nazwie ( int nazwafunkcji(int c) ) np. int isalnum(int c)

  • isalnum - sprawdza czy wprowadzony znak jest liczbą bądź literą,
  • isalpha - sprawdza czy jest literą
  • isblank - sprawdza czy jest spacją bądź tabulacją
  • iscntrl - sprawdza czy jest to znak sterujący
  • isdigit - sprawdza czy podany znak jest cyfrą
  • isgraph - czy jest to znak drukowany różny od spacji
  • islower - czy podany znak jest małą literą
  • isupper - sprawdza czy znak jest dużą literą
  • isprint - czy jest może jakimkolwiek znakiem drukowanym 
  • ispunkt - sprawdza czy jest to może znak przystankowy (np. kropka, średnik, przecinek)
  • isspace - sprawdza czy jest to biały znak np. spacja, wysunięcie \f, przejście do nowej linii '\n', znak powrotu karetki '/r', tabulacja pozioma \t lub tabulacja pionowa \v
  • isxdigit - czy jest to cyfra szesnastkowa,


Co do wartości zwracanej przez podane funkcje, występuje 0 gdy dany argument nie spełni założeń oraz inna wartość w przeciwnym przypadku.

Program


Poniżej przedstawiam program, który zawiera wywołania wszystkich opisanych funkcji. Opis kodu umieściłem bezpośrednio w programie w komentarzach.

#include <ctype.h>
#include <locale.h>
#include <stdio.h>
 
void zestawfunkcji(int c);
void wypisanie(int c);
 
int main()
{
    //Definicja zmiennej
    unsigned char c;
    //Podanie znaku do identyfikacji
    printf("Podaj znak do zidentyfikowania\n");
    //Po podaniu znaku następuje wejście
    if (scanf("%c", &c)==1)
    {
        //Sprawdzenie każdej z funkcji
        zestawfunkcji(c);
        printf("------------------------------------------------\n");
        wypisanie(c);
    }
    return 0;
}
 
void zestawfunkcji(int c)
{
    //Wypisanie teksu i sprawdzenie warunku
    //Gdy wartosc nie jest znakiem następuje wstawienie liczby 0
    //W innym przypadku wypisana zostaje naturalna liczba dodatnia
    printf(" Litera lub cyfra: %s\n", isalnum(c) ? "tak" : "nie");
    printf(" Odstep: %s\n", isblank(c) ? "tak" : "nie");
    printf(" Znak sterujacy: %s\n", iscntrl(c) ? "tak" : "nie");
    printf(" Cyfra dziesietna: %s\n", isdigit(c) ? "tak" : "nie");
    printf(" Graficzny: %s\n", isgraph(c) ? "tak" : "nie");
    printf(" Mala litera: %s\n", islower(c) ? "tak" : "nie");
    printf(" Drukowalny: %s\n", isprint(c) ? "tak" : "nie");
    printf(" Przestankowy: %s\n", ispunct(c) ? "tak" : "nie");
    printf(" Bialy znak: %s\n", isspace(c) ? "tak" : "nie");
    printf(" Wielka litera: %s\n", isupper(c) ? "tak" : "nie");
    printf(" Cyfra szesnastkowa: %s\n", isxdigit(c) ? "tak" : "nie");
}
 
void wypisanie(int c)
{
    //Zadaniem tej funkcji jest wypisanie infrmacji prawdziwych odnosnie
    //podanego znaku
    if(isalnum(c) > 0)
    {
        printf("Jest to litera lub cyfra, przyjeta wartosc przez funkcje to: %d\n", isalnum(c));
    }
    if(isblank(c) > 0)
    {
        printf("Jest to odstep, przyjeta wartosc przez funkcje to: %d\n", isblank(c));
    }
    if(iscntrl(c) > 0)
    {
        printf("Jest to znak sterujacy, przyjeta wartosc przez funkcje to: %d\n", iscntrl(c));
    }
    if(isdigit(c) > 0)
    {
        printf("Jest to cyfra dziesietna, przyjeta wartosc przez funkcje to: %d\n", isdigit(c));
    }
    if(isgraph(c) > 0)
    {
        printf("Jest to znak graficzny, przyjeta wartosc przez funkcje to: %d\n", isgraph(c));
    }
    if(islower(c) > 0)
    {
        printf("Jest to mala litera, przyjeta wartosc przez funkcje to: %d\n", islower(c));
    }
    if(isprint(c) > 0)
    {
        printf("Jest to znak drukowalny, przyjeta wartosc przez funkcje to: %d\n", isprint(c));
    }
    if(ispunct(c) > 0)
    {
        printf("Jest to znak przystankowy, przyjeta wartosc przez funkcje to: %d\n", ispunct(c));
    }
    if(isblank(c) > 0)
    {
        printf("Jest to odstep, przyjeta wartosc przez funkcje to: %d\n", isblank(c));
    }
    if(isspace(c) > 0)
    {
        printf("Jest to bialy znak, przyjeta wartosc przez funkcje to: %d\n", isspace(c));
    }
    if(isupper(c) > 0)
    {
        printf("Jest to wielka litera, przyjeta wartosc przez funkcje to: %d\n", isupper(c));
    }
    if(isxdigit(c) > 0)
    {
        printf("Jest to cyfra szesnastkowa, przyjeta wartosc przez funkcje to: %d\n", isxdigit(c));
    }
}