Как сделать сравнение строк без учета регистра?

Я хочу сделать сравнение строк без учета регистра. Что было бы самым простым способом сделать это? У меня есть приведенный ниже код, который выполняет операцию с учетом регистра.

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

int main(int argc, char *argv[])
{
    char *str1 = "String";
    char *str2 = "STRING";

    if (strncmp(str1, str2, 100) != 0)
    {
        printf("=(");
        exit(EXIT_FAILURE);
    }

    return 0;
}

person Jon Erickson    schedule 08.06.2015    source источник
comment
сначала преобразуйте toupper, затем сравните   -  person amdixon    schedule 08.06.2015


Ответы (2)


Если вы можете позволить себе небольшое отклонение от строгого C стандарта, вы можете использовать strcasecmp(). Это POSIX-API.

В противном случае у вас всегда есть возможность преобразовать строки в определенный регистр (ПРОПИСНАЯ или меньшая), а затем выполнить обычное сравнение, используя strcmp().

person Sourav Ghosh    schedule 08.06.2015
comment
ты имеешь в виду strncasecmp? - person Aki Suihkonen; 08.06.2015
comment
@AkiSuihkonen До вас у вас (почти) всегда есть версия с разделителями по длине. Во всяком случае, справочная страница, которая мне понравилась, содержит обе версии. :-) - person Sourav Ghosh; 08.06.2015
comment
Вы имели в виду связано.. - person WedaPashi; 08.06.2015
comment
@WedaPashi, ха, мой плохой. да правильно ты. (извините, период редактирования закончился) :-) - person Sourav Ghosh; 08.06.2015

Вы можете использовать функцию strcmpi().

if(strcmpi(str1,str2)!=0)

только для систем Windows.

person Sourav Kanta    schedule 08.06.2015
comment
Извините, но разве это не специфично для Windows? - person Sourav Ghosh; 08.06.2015
comment
man strcmpi --› нет ручного ввода для strcmpi - person Aki Suihkonen; 08.06.2015
comment
@AkiSuihkonen Нужно проверить здесь< /а>. - person Sourav Ghosh; 08.06.2015
comment
Кроме того, вы могли бы просто упомянуть о включении Shlwapi.h - person WedaPashi; 08.06.2015