C++ cin.ignore 忽略空格、数字和字符来测试回文

C++ cin.ignore To ignore spaces, numbers, and characters to test a palindrome

我需要处理用户输入以查看它是否是回文。我们的教授说要使用 cin.ignore() 来忽略空格、数字和其他字符,因此我们将只比较字母输入。

到目前为止,我只是发现一次只忽略其中一个的代码,而且代码比我学习的更高级,所以我不知道如何修改或将其应用到我的代码中。

我有检查回文的代码,只是不知道如何让它忽略不需要的输入。

抱歉,这种问题已经被问过很多次了,但我似乎无法弄明白。

提前致谢。

do
{
    checkInput = false;

    cout << "Enter the Palindrome: ";
    getline(cin, input);

    len = input.length();

    if (len == 0)
    {
        cout << "\nNo data was entered, please enter a palindrome.\n";
        checkInput = false;
    }

} while (checkInput);

for (int i = 0, j = input.size() - 1; i < input.size(); i++, j--)
{

    if (input[i] != input[j] && input[i] + 32 != input[j] && input[i] - 32 != input[j])
    {

        isPalindrome = false;
        break;

    }
}

if (isPalindrome)
{
    cout << "This is a Palindrome!!" << endl;
}

else
{
    cout << "This is not a Palindrome." << endl;
}

我假设输入是一个字符串。如果是这样,那么在你的 for 循环之前我们想要做的是让另一个 for 循环到 运行 通过字符串并从字符串中删除任何不需要的东西。我将假设您要处理的只是大写字母和小写字母,因为我们关注的是 65-90 和 97-122 之间的 ascii 值。来源 http://www.ascii-code.com/

为此,我们可以简单地检查字符串中的每个索引,看它是否落在这两个范围之间,如果不落在这两个范围之间,则将其删除。

    for(unsigned int i = 0; i<input.size();i++)
    {
      if(input[i]< 65 || (90 <input[i] && input[i] < 97) || input[i] > 122)   
      {
        input.erase(i,1);
        i--
      }
    }

应该可以。