C++ 检查字符串是否为回文

C++ 检查字符串是否为回文,c++,C++,我需要创建一个允许用户输入字符串的程序,我的程序将检查他们输入的字符串是否是回文(可以向后读取的单词与可以向前读取的单词相同)。只需将字符串与其本身进行比较: string input; cout << "Please enter a string: "; cin >> input; if (input == string(input.rbegin(), input.rend())) { cout << input << " is a

我需要创建一个允许用户输入字符串的程序,我的程序将检查他们输入的字符串是否是回文(可以向后读取的单词与可以向前读取的单词相同)。

只需将字符串与其本身进行比较:

string input;

cout << "Please enter a string: ";
cin >> input;

if (input == string(input.rbegin(), input.rend())) {
    cout << input << " is a palindrome";
}
字符串输入;
cout>输入;
if(input==string(input.rbegin(),input.rend()){

CUT< P>反转字符串并检查原始字符串和反向是否相同或

我不是C++的家伙,但你应该能够从中得到要点。

public static string Reverse(string s) {
    if (s == null || s.Length < 2) {
        return s;
    }

    int length = s.Length;
    int loop = (length >> 1) + 1;
    int j;
    char[] chars = new char[length];
    for (int i = 0; i < loop; i++) {
        j = length - i - 1;
        chars[i] = s[j];
        chars[j] = s[i];
    }
    return new string(chars);
}
公共静态字符串反转(字符串s){
如果(s==null | | s.长度<2){
返回s;
}
int长度=s.长度;
int循环=(长度>>1)+1;
int j;
char[]chars=新字符[长度];
for(int i=0;i
请注意,反转整个字符串(使用
rbegin()
/
rend()
范围构造函数或使用
std::reverse
)并将其与输入进行比较将执行不必要的工作

将字符串的前半部分与后半部分进行反向比较就足够了:

#include <string>
#include <algorithm>
#include <iostream>
int main()
{
    std::string s;
    std::cin >> s;
    if( equal(s.begin(), s.begin() + s.size()/2, s.rbegin()) )
        std::cout << "is a palindrome.\n";
    else
        std::cout << "is NOT a palindrome.\n";
}
#包括
#包括

bool IsPalindrome(const char*psz)
{
int i=0;
int j;
如果((psz==NULL)| |(psz[0]=='\0'))
{
返回false;
}
j=strlen(psz)-1;
而(i
//STL字符串版本:

bool IsPalindrome(const string& str)
{
    if (str.empty())
        return false;

    int i = 0;                // first characters
    int j = str.length() - 1; // last character

    while (i < j)
    {
        if (str[i] != str[j])
        {
            return false;
        }
        i++;
        j--;
    }
    return true;
}
bool IsPalindrome(常量字符串和str)
{
if(str.empty())
返回false;
int i=0;//第一个字符
int j=str.length()-1;//最后一个字符
而(i >代码> /下面的C++函数检查回文和
//如果是回文,则返回true,否则返回false
布尔检查回文(字符串s)
{
//这将计算字符串的长度
int n=s.长度();
//for循环迭代到字符串的前半部分
//并检查第一个元素和最后一个元素,
//第二个元素和第二个最后一个元素,依此类推。
//如果这两个字符不相同,则返回false,因为
//此字符串不是回文


对于(int i=0;i),我首先单击右上角的“搜索”栏,输入“回文”浏览各种语言中的几十个可能的答案…@ MikeChristensen,这是一个标记为C的问题,当辩论答案时,人们会抱怨的东西在C++中会不同……为什么地球在这个问题上被标记为重复的代码< C >代码>问题,用低级答案……如果你需要检查向量AF整数是回文还是不:如果你不是C++的人,为什么用PIDGIN C++来回答C++问题,那就不接近编译了?————如果用你不知道的语言提供建议,我的建议是使用几乎是英语的“明显”伪代码。(例如,
Let L=S.Length
int Length=S.Length
更不可能引起眼球转动。)任何熟悉代码的人都应该能弄明白。天哪。我想敌意是你的正确修饰语。什么…我只是注意到这在大约…30秒后甚至没有检查回文。所以,它是模糊的,不是答案?@varatis我想我的回答是有尺度的。我没有投你反对票。(其他人解释了,或者解释了,或者没有解释原因。)我正在提出一个关于如何在这样的情况下提供反馈的建议,而不编写代码,这可能会使一个新的C++程序员感到困惑,而不是帮助他们。至于恶意软件开发的岔口,请查阅它。+ 1在资源和时间复杂性方面肯定更好。标记C++,在这种情况下,没有理由产生像这样的混淆代码吗?看看即时验证你真的认为上面的代码是模糊的吗?Cubbi的解决方案只是STL功夫。没有什么错。但是上面的代码是这个问题的经典解决方案-只是不使用STL。为了让你高兴,我将展示一个合理的STL变化相同的解决方案。无可否认,它可能会更糟。如果你做C++(不一定是STL)的变体,让我删除我的-1i,不知道你所说的“不是C++”的“C++”变体是什么意思。几乎所有的C代码都是有效的C++代码。当有人在C/C++中提到“字符串”时,我会想到“指针到字符”。它仅仅是一个字符指针的封装,具有额外的开销和一些漂亮的特性。我花了比我承认的更多的时间来努力使我编写的所有代码行都可读、可理解和可维护。所以你可以看出为什么我会对我的代码被称为“模糊化”而大发雷霆您编写的代码是C++,而不是STL。STL意味着使用STL特性,如迭代器和算法。您不使用任何这些。C++(通常)字符串是具有管理生命周期和分配的第一类对象。字符串包含无问题的字符。我的观点是:即使你不喜欢STL,使用C++样式的好处已经很明显了;没有理由使用<代码> char *<代码>和<代码>斯特伦< /代码>。(因为他们更容易出错,更不灵活)我会投票支持你的答案,除了明显的抱怨:这是家庭作业,提供方法/算法,而不是代码。op从这个练习中学到了什么,懒惰是值得的:(当字符串的字符数为奇数时,它不起作用。如果您在代码中添加一些注释或解释,我会更好。虽然此代码可以回答问题,但提供了额外的上下文r。)
bool IsPalindrome(const string& str)
{
    if (str.empty())
        return false;

    int i = 0;                // first characters
    int j = str.length() - 1; // last character

    while (i < j)
    {
        if (str[i] != str[j])
        {
            return false;
        }
        i++;
        j--;
    }
    return true;
}
// The below C++ function checks for a palindrome and 
// returns true if it is a palindrome and returns false otherwise

bool checkPalindrome ( string s )
{
    // This calculates the length of the string

    int n = s.length();

    // the for loop iterates until the first half of the string
    // and checks first element with the last element,
    // second element with second last element and so on.
    // if those two characters are not same, hence we return false because
    // this string is not a palindrome 

    for ( int i = 0; i <= n/2; i++ ) 
    {
        if ( s[i] != s[n-1-i] )
            return false;
    }
    
    // if the above for loop executes completely , 
    // this implies that the string is palindrome, 
    // hence we return true and exit

    return true;
}