我的老师要求我使用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]);
}
}
答案 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]);
但是还有更多问题。我将此作为练习。