#include <stdio.h>

#define SIZE 100

int myStringCompareArray(const char string1[],
                         const char string2[])
{
    int i = 0;

    while (string1[i] != '\0' &&
           string2[i] != '\0')
    {
        if (string1[i] < string2[i])
        {
            return -1;
        }

        if (string1[i] > string2[i])
        {
            return 1;
        }

        ++i;
    }

    if (string1[i] == '\0' &&
        string2[i] == '\0')
    {
        return 0;
    }

    if (string1[i] == '\0')
    {
        return -1;
    }

    return 1;
}

int myStringComparePointer(const char *string1,
                           const char *string2)
{
    while (*string1 != '\0' &&
           *string2 != '\0')
    {
        if (*string1 < *string2)
        {
            return -1;
        }

        if (*string1 > *string2)
        {
            return 1;
        }

        ++string1;
        ++string2;
    }

    if (*string1 == '\0' &&
        *string2 == '\0')
    {
        return 0;
    }

    if (*string1 == '\0')
    {
        return -1;
    }

    return 1;
}

int myStringNCompareArray(const char string1[],
                          const char string2[],
                          int number)
{
    for (int i = 0; i < number; ++i)
    {
        if (string1[i] == '\0' ||
            string2[i] == '\0')
        {
            if (string1[i] == string2[i])
            {
                return 0;
            }

            if (string1[i] == '\0')
            {
                return -1;
            }

            return 1;
        }

        if (string1[i] < string2[i])
        {
            return -1;
        }

        if (string1[i] > string2[i])
        {
            return 1;
        }
    }

    return 0;
}

int myStringNComparePointer(const char *string1,
                            const char *string2,
                            int number)
{
    for (int i = 0; i < number; ++i)
    {
        if (*string1 == '\0' ||
            *string2 == '\0')
        {
            if (*string1 == *string2)
            {
                return 0;
            }

            if (*string1 == '\0')
            {
                return -1;
            }

            return 1;
        }

        if (*string1 < *string2)
        {
            return -1;
        }

        if (*string1 > *string2)
        {
            return 1;
        }

        ++string1;
        ++string2;
    }

    return 0;
}

int main(void)
{
    char string1[SIZE];
    char string2[SIZE];
    int number;

    printf("Enter the first string: ");
    fgets(string1, SIZE, stdin);

    printf("Enter the second string: ");
    fgets(string2, SIZE, stdin);

    printf("Enter number of characters to compare: ");
    scanf("%d", &number);

    printf("\nUsing array notation:\n");

    printf("strcmp result = %d\n",
           myStringCompareArray(string1, string2));

    printf("strncmp result = %d\n",
           myStringNCompareArray(string1,
                                  string2,
                                  number));

    printf("\nUsing pointer notation:\n");

    printf("strcmp result = %d\n",
           myStringComparePointer(string1, string2));

    printf("strncmp result = %d\n",
           myStringNComparePointer(string1,
                                   string2,
                                   number));

    return 0;
}