создание функции сравнения строк - PullRequest
0 голосов
/ 08 ноября 2019

Я создал функцию, которая сравнивает строки, и, как я расстроился из-за того, что всегда пропускал последний символ во второй строке и всегда возвращал «одинаковые строки» в результате, я заметил, что возился и использовал get ()вместо fgets () для второй строки. Я изменил это, и функция работает как положено.

Мой вопрос: почему функция gets () вычитает этот последний символ? Не должно ли это вычесть ноль и оставить все как есть?

Означает ли это, что, как новичок в C, я должен избегать использования gets () и сосредоточиться на fgets ()? Я начинаю думать о них так же, как я думаю о strcmp () vs strncmp ()

Спасибо за ваше время, все!

Примечание: я знаю, что я неМне действительно нужно (i == j) в конце, я просто оставил его там (может быть, дополнительная безопасность).

bool compare_string(const char *string1, const char *string2) {
        int i = 0, j = 0, result = 0;
        while (string1[i] != '\0') {
            i++;
        }

        while (string2[j] != '\0') {
            j++;
        }

        i = 0;
        j = 0;

        while ((string1[i] != '\0') && (string2[j] != '\0')) {
            if (string1[i] < string2[j]) {
                result = -1;
                break;
            } else if (string1[i] > string2[j]) { 
                result = 1;
                break;
            } else if (string1[i] == string2[j]) {
                result = 0;
            }
            i++;
            j++; 
        }

        if ((result == 0) && (i==j)) {
            printf("identical strings \n"); 
        } else if (result == -1) {
            printf("not identical, -1 \n");
        } else if (result == 1) {
            printf("not identical, 1 \n");
        }
}

//in main
char str_compare1[STRING_LIMIT];
    char str_compare2[STRING_LIMIT];

    printf("enter 1st string to compare, (100) characters or less: \n");
    fgets(str_compare1, STRING_LIMIT, stdin);

    printf("enter 2nd string to compare, (100) characters or less \n");
    fgets(str_compare2, STRING_LIMIT, stdin);

    result = compare_string(str_compare1, str_compare2);
...