如何在C ++中使用字符串函数检查字符串是否为回文

时间:2015-12-14 00:12:36

标签: c++ palindrome

我的任务是创建一个程序来检查输入的字符串是否是回文,所以我在这里有这个简单的程序:

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

int main()
{
    char y[100], x[100];
    cout << "Enter word" << endl;
    cin >> y;
    strcpy(x, y);
    strrev(x);
    if (strcmp(y, x) == 0)
        cout << "Palindrome";
    else
        cout << "Not Palindrome";
    system("pause");
    return 0;
}

但是,我不允许使用strcpy,strrev,strcmp等字符串函数。在这种情况下,我可能会为此程序使用一个字符数组。如果代码易于理解,我可能会感激,因为我是C ++的初学者。任何帮助表示赞赏。

***感谢早期的帮助,我完成了大部分程序。

***我忘了添加,程序忽略字符串中的空格,如&#34; rad ar&#34;或&#34;赛车&#34;仍将作为回文返回。遗憾的是,我无法弄清楚这个空间检查功能的编码。

2 个答案:

答案 0 :(得分:1)

回文只是一个单词,其第一个字符等于最后一个字符,依此类推。因此,为了检查它是否是回文,你只需复制strlen函数的功能就可以知道你要比较第一个字符的角色的位置。

在C ++中,使用变量,可以使用while循环轻松完成:

int i = 0;
// Is this a null terminating character?
while (y[i])
{
    // Move to the next character
    i++;
}

为了让事情更容易,并且真正成为strlen的一个插件,这可以放在一个函数中:

int stringLength (char *input)
{
    int i = 0;
    while (input[i])
    {
        i++;
    }
    return i;
}

现在你只需循环输入,比较第一个字符和最后一个字符,比较第二个字符和第二个字符,依此类推......你只需要记住,由于数组的工作方式,最后一个字符实际上位于len-1位置。

#include <iostream> // required for cout, and cin

// returns the length of a c style string
int stringLength(char *input)
{

    int i = 0;
    // Is this a null terminating character
    while (input[i])
    {
        // No, check the next character
        i++;
    }
    return i;
}

int main()
{
    // Get input from the user.
    char input[100];
    std::cin >> input;

    // Calculate the length of the input
    int length = stringLength(input);

    // At position length is the null terminating character,
    // the last character is actually at position len - 1
    int lastIndex = length - 1;

    // Stores whether of not we found a palindrome
    bool isPalindrome = true;

    // Loop through the string checking if the first character is equal to
    // the last, second to second last etc...
    for (int i = lastIndex; i >= length/2; i--)
    {
        // Check the palindrome condition
        if (input[i] != input[lastIndex - i])
        {
            isPalindrome = false;
            break;
        }
    }

    // Output the result
    if (isPalindrome)
    {
        std::cout << "Palindrome" << std::endl;
    }
    else
    {
        std::cout << "Not palindrome" << std::endl;
    }

    return 0;
}

答案 1 :(得分:-1)

这里你去:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main(){
    char y[100], x[100];
    cout<<"Enter word"<<endl;
    cin>>y;

    //Get the size of the word entered
    int len = 0;
    char*p = y;
    while(*p++) len++;

    //Check for palindrome
    bool palindrome=true;
    for(int i=0; i<len/2; ++i){
            if(y[i]!=y[len-1-i]) palindrome=false;
    }
    cout << "palindrome:" << (palindrome?"true":"false") << "\n";
    return 0;
}