C ++ Аргумент типа "char" несовместим с параметром типа "const char" - PullRequest
0 голосов
/ 19 сентября 2019

Мой инструктор попросил меня создать программу с использованием cstring, которая проверяет, является ли программа палиндромом.почему его аргумент типа "char" несовместим с параметром типа "const char" error.

#include <iostream>
#include <cstring>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    string str = "";
    int strcmpVal;
    int length = str.length();
    cout << "******************************" << endl;
    cout << "PALINDROME" << endl;
    cout << "******************************" << endl;
    cout << "Enter a word: ";
    getline(cin, str);
    char* cStr = new char[str.length() + 1];
    strcpy(cStr, str.c_str());
    for (int i = 0; i < (length / 2); i++)
    {
        strcmpVal = strcmp(cStr[i],cStr[(length -1) -1]);
    }

}

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Для начала это утверждение

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;
0 голосов
/ 19 сентября 2019
strcmp(cStr[i], cStr[(length - 1) - 1]);

cStr[i] - это char, но аргументы strcmp должны быть char* с (указатель на char).

Но использование strcmp здесь неправильнов любом случае, вы просто хотите сравнить char, поэтому вам нужно:

strcmpVal = cStr[i] == cStr[(length -1) -1]);

Но есть и другие проблемы.Я позволил это как упражнение.

...