C'de Dizi Sorusu

Başlatan swearer, 28 Aralık 2015, 23:02:37

swearer

Girilen iki string in anagram olup olmadığını kontrol eden bir program. Koyu renkli kodlarda iç içe geçmiş dizi yapıları bulunuyor bunların ne için kullanıldığını çözemedim. Ayrıca for döngüleri içindeki ifadeler neden 1 arttırılmış onu da anlamadım. kısaca açıklayabilecek olan var mı ?

----------------------------------------------------------

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

int isAnagram(char *firstString, char *secondString);
int main(){
    char firstString[100], secondArray[100];
    printf("Enter first String \n");
    gets(firstString);
    printf("Enter second String \n");
    gets(secondArray);

    if(isAnagram(firstString, secondArray) == 1){
       printf("%s and %s are Anagram\n",firstString,secondArray);
    } else {
       printf("%s and %s are not Anagram\n",firstString,secondArray);
    }
    getch();
    return 0;
}

/*
* Function to check whether two passed strings are anagram or not
* returns 1 if anagram otherwise 0
*/
int isAnagram(char *firstString, char *secondString){
    int firstCharCounter[256] = {0}, secondCharCounter[256] = {0};
    int counter;
    /* Two Strings cannot be anagram if their length is not equal */
    if(strlen(firstString) != strlen(secondString)){
        return 0;
    }
    /* count frequency of characters of firstString */
    for(counter = 0; firstString[counter] != '\0'; counter++){
        firstCharCounter[firstString[counter]]++;

    }
    /* count frequency of characters of secondString */
    for(counter = 0; secondString[counter] != '\0'; counter++){
        secondCharCounter[secondString[counter]]++;

    }
    /* compare character counts of both strings,
       If not equal return 0, otherwise 1 */
    for(counter = 0; counter < 256; counter++){
        if(firstCharCounter[counter] != secondCharCounter[counter])
            return 0;
    }
    return 1;
}


----------------------------------------------------------

Tagli

firstCharCounter dediği dizi, ilk kelimenin içinde hangi harften kaç tane olduğunu tutuyor. İşi kolaylaştırmak için bellekten feda edip 256'lık diziler tanımlamışlar, yani aslında ASCII karakterlerine göre çalışıyor. Kelime içinde mesela bir 'a' geçiyorsa, firstCharCounter['a']++ gibi bir ifade gelmiş oluyor ki bu da firstCharCounter[97]++ anlamına geliyor. Yani "bir tane daha a buldum" demek. Programın sonunda, iki kelimedeki harf sayıları tabloları karşılaştırıyor. Anagram olabilmesi için iki kelimede de aynı sayıda 'a', aynı sayıda 'b' vs. olması gerekli.
Gökçe Tağlıoğlu