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
char
s, использовать==
оператор. - если вы хотите сравнить строки, передайте адрес, используя
&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
,