我试图编写一个代码来查找一个单词是否是回文,但它不起作用。怎么了?
I have tried to write a code to find if a word is a palindrome or not but it is not working. Whats's wrong with it?
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int len;
char char1[100],char2[100];
cout << "Enter a word:" << endl;
cin >> char1;
len = strlen(char1);
for(int i=0;i<len;i++)
{
char2[i] = char1[len-i-1];
}
if(strcmp(char1,char2))
{
cout << "It is not a palindrome." << endl;
}
else
{
cout << "It is a palindrome" << endl;
}
}
我试着写了一段代码来判断一个词是否是回文。当我输入 "madam" 作为输入时,输出是 "It is a palindrome"。但是当我输入 "dad" 作为输入时,输出是 "It is not a palindrome"。为什么?
因为这里用字符数组来表示字符串,而且strcmp
用来比较这些数组,
您需要记住,文本的最后一个值必须是 '[=16=]'
(也称为空字符/空终止符)。
所以在循环之后,反向复制字符串,需要添加以下内容;
char2[len] = '[=10=]';
当使用 strcmp
时,条件应该明确显示它正在检查的内容。原因是 strcmp
returns 3 结果 (-1
, 0
,1
) 并且如果 API 正确使用。 (尽管 C 和 C++ 具有将值隐式转换为布尔值的功能)
同样与直觉相反,当比较的字符串不同(-1
和1
) 并在 相同时转换为 false
(0
).
条件应该是,例如:
if (strcmp(char1, char2) == 0) // checking if strings are equal
或
if (strcmp(char1, char2) != 0) // checking if strings are different
在像这里这样的函数结果不明确的情况下,甚至建议创建一个临时(常量)布尔变量以使代码更容易理解。像这样:
const bool is_palindrome = (strcmp(char1, char2) == 0);
if (is_palindrome)
// ...
这里还有一个建议,如何实现这个算法:
#include <iostream>
#include <string>
int main()
{
using namespace std;
cout << "Enter a word:" << endl;
string input_str;
getline(cin, input_str);
const string reversed_str(input_str.rbegin(), input_str.rend());
const bool is_palindrome = (input_str == reversed_str);
if (is_palindrome)
{
cout << "It is a palindrome" << endl;
}
else
{
cout << "It is not a palindrome." << endl;
}
}
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int len;
char char1[100],char2[100];
cout << "Enter a word:" << endl;
cin >> char1;
len = strlen(char1);
for(int i=0;i<len;i++)
{
char2[i] = char1[len-i-1];
}
if(strcmp(char1,char2))
{
cout << "It is not a palindrome." << endl;
}
else
{
cout << "It is a palindrome" << endl;
}
}
我试着写了一段代码来判断一个词是否是回文。当我输入 "madam" 作为输入时,输出是 "It is a palindrome"。但是当我输入 "dad" 作为输入时,输出是 "It is not a palindrome"。为什么?
因为这里用字符数组来表示字符串,而且strcmp
用来比较这些数组,
您需要记住,文本的最后一个值必须是 '[=16=]'
(也称为空字符/空终止符)。
所以在循环之后,反向复制字符串,需要添加以下内容;
char2[len] = '[=10=]';
当使用 strcmp
时,条件应该明确显示它正在检查的内容。原因是 strcmp
returns 3 结果 (-1
, 0
,1
) 并且如果 API 正确使用。 (尽管 C 和 C++ 具有将值隐式转换为布尔值的功能)
同样与直觉相反,当比较的字符串不同(-1
和1
) 并在 相同时转换为 false
(0
).
条件应该是,例如:
if (strcmp(char1, char2) == 0) // checking if strings are equal
或
if (strcmp(char1, char2) != 0) // checking if strings are different
在像这里这样的函数结果不明确的情况下,甚至建议创建一个临时(常量)布尔变量以使代码更容易理解。像这样:
const bool is_palindrome = (strcmp(char1, char2) == 0);
if (is_palindrome)
// ...
这里还有一个建议,如何实现这个算法:
#include <iostream>
#include <string>
int main()
{
using namespace std;
cout << "Enter a word:" << endl;
string input_str;
getline(cin, input_str);
const string reversed_str(input_str.rbegin(), input_str.rend());
const bool is_palindrome = (input_str == reversed_str);
if (is_palindrome)
{
cout << "It is a palindrome" << endl;
}
else
{
cout << "It is not a palindrome." << endl;
}
}