“ char”类型的C ++参数与“ const char”类型的参数不兼容

时间:2019-09-19 14:52:21

标签: c++ string for-loop c-strings palindrome

我的老师要求我使用cstring编写程序,以检查程序是否是回文。 为什么给我“类型为char的参数与类型为const char的参数不兼容”错误。

#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 个答案:

答案 0 :(得分:1)

对于初学者来说,这句话

int length = str.length();

没有任何意义,因为对象str仍为空。输入字符串后,您必须计算长度。

标准C函数strcmp比较字符串而不是单个字符。这是表达式cStr[i]的类型为char,而该函数将跳过类型为char *的参数,如果将其传递给函数,则该表达式将具有表达式cStr。 / p>

因此,请改用此循环

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;

答案 1 :(得分:0)

strcmp(cStr[i], cStr[(length - 1) - 1]);

cStr[i]char,但是strcmp的参数必须是char*(指向char的指针)。

但是在这里使用strcmp还是错误的,您只想比较char,因此您需要:

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

但是还有更多问题。我将此作为练习。