Для начала это утверждение
int length = str.length();
не имеет смысла, потому что объект str
еще пуст.Вы должны рассчитать длину после ввода строки.
Стандартная функция C strcmp
сравнивает строки, а не отдельные символы.Это тип выражения cStr[i]
равен char
, в то время как функция ожидает аргумент типа char *
, который будет иметь выражение cStr
, если будет передано функции.
Поэтому используйте вместоэтот цикл
size_t i = 0;
size_t length = str.length();
while ( i < length / 2 && cStr[i] == cStr[length - i - 1] ) i++;
if ( i == length / 2 ) std::cout << "The string is a palindrome.\n";
Учтите, что эти заявления
char* cStr = new char[str.length() + 1];
strcpy(cStr, str.c_str());
являются избыточными.
Вы можете просто написать
const char *cStr = str.c_str();
В противном случае вынеобходимо освободить выделенную память после того, как она больше не используется.
delete [] cStr;