C/C++ strcmp не может преобразовать аргумент 1 из 'char' в 'const char *'

Поэтому я передаю массив символов (En), состоящий из нескольких слов, и пытаюсь отсортировать по алфавиту. К сожалению, мой компилятор взрывается с " int strcmp(const char *,const char *)": не может преобразовать аргумент 1 из 'char' в 'const char *", и я как бы застрял!

void TDihotTable::Set(char *En){
    int i, j;
    bool sorted = false;
    char* pTemp = NULL;
    while (!sorted)
    {
        sorted = true;
        for (size_t i = 0; i < 6 - 1; ++i)
        {
            if (!strcmp(En[i], En[i + 1]) > 0)
            {
                sorted = false;
                pTemp = En[i];
                En[i] = En[i + 1];
                En[i + 1] = pTemp;
            }
        }
    }
}

5 ответов

Решение

Ваша функция должна выглядеть так:

void TDihotTable::Set(char **En){
                           ^^

Это будет массив указателей на строку, которые вы можете использовать как strcmp, как в

       if (!strcmp(En[i], En[i + 1]) > 0)
           ^

что так же глючит на отметке. использование

       if (strcmp(En[i], En[i + 1]) > 0)

на данный момент вы пытаетесь сравнить отдельные символы.

strcmp() ожидает, что это аргументы const char *, но в вашем коде, En[i] а также En[i+1] имеют тип char,

  • если вы хотите, чтобы comapre chars, использовать == оператор.
  • если вы хотите сравнить строки, передайте адрес, используя &En[i] а также &En[i+1]

Это сказало,

 if (!strcmp(En[i], En[i + 1]) > 0)

неправильно. Пожалуйста, проверьте вашу логику.

strcmp() для сравнения требуются строки, а не символы. Итак, вместо этой строки:

 if (!strcmp(En[i], En[i + 1]) > 0)

Вы можете напрямую сравнить два символа как if(En[i]==En[i+1]) или же if(En[i]!=En[i+1]) согласно вашим требованиям

Массив слов должен быть двумерным массивом символов: char **En, Сравнение должно работать тогда.

Использование En[i] != En[i + 1] сравнивать персонажей. strcmp принимает char * аргументы но En[i] а также En[i + 1] являются char,

Другие вопросы по тегам