Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Cwiczenie 13 */
- #include <stdio.h>
- #include <limits.h> /* UCHAR_MAX */
- typedef unsigned int uint;
- /* Definiujemy typ Bool i stale logiczne. */
- typedef char Bool;
- #define True 1
- #define False 0
- Bool czyAnagram(const char* str1, const char* str2) {
- /******************** Algorytm **********************/
- /* Sprawdzimy czy dwa wyrazy sa anagramami w bardzo */
- /* prosty sposob. Zliczymy po prostu ilosc kazdej */
- /* z liter w obu wyrazach, a nastepnie porownamy, */
- /* czy liczba poszczegolnych liter jest taka sama. */
- /* Jezeli tak, to mamy anagram! */
- /****************************************************/
- uint litery1[UCHAR_MAX+1] = {0}; /* Tablice ilosci poszczegolnych liter. */
- uint litery2[UCHAR_MAX+1] = {0}; /* Inicjalizujemy je zerami. */
- uint i; /* Iterator petli */
- unsigned char c; /* Taki maly bufor */
- /* Tablice litery[] indeksowane beda znakami typu unsigned char */
- /* Wykorzystujemy tutaj ceche jezyka C. Mianowicie znaki sa tak */
- /* naprawde liczbami, wiec bez problemu moga indeksowac tablice. */
- /* Ponizsze petle while sluza do zliczenia wystapien liter */
- /* w wyrazach str1 i str2. Obie postepuja wedlug schematu: */
- /* 1. Przypisuj c wartosc *strX. */
- /* 2. Inkrementuj wskaznik strX - przejdz do nastepnego znaku. */
- /* 3. Inkrementuj wartosc tablicy litery[c]. */
- /* 4. Wykonuj az natrafisz na znak konca lancucha '\0'. */
- while ( (c = *str1++) )
- litery1[c]++;
- while ( (c = *str2++) )
- litery2[c]++;
- for (i = 0; i < UCHAR_MAX+1; i++)
- if (litery1[i] != litery2[i])
- return False;
- return True;
- }
- void test(const char* str1, const char* str2) {
- if (czyAnagram(str1, str2))
- printf("Wyrazy '%s' i '%s' to anagramy!\n", str1, str2 );
- else
- printf("Wyrazy '%s' i '%s' nie sa anagramami.\n", str1, str2 );
- }
- int main(void) {
- test("arbuz", "sofa");
- test("kanonada", "anakonda");
- test("sekret", "kretes");
- test("Godzio", "Eta");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment