【问题标题】:C++ program to check if a given string is a palindromeC ++程序检查给定字符串是否为回文
【发布时间】:2013-04-29 14:34:24
【问题描述】:

这里的问题是它不能是用户输入的字符串。有7个字符串,其中6个是数字,一个是单词“abba”。到目前为止,我已经编写了很多代码,但我无法找到一种方法来测试我必须用于程序的 7 个字符串。

#include <iostream>
#include <iomanip>
#include <cmath>
#include <string>

using namespace std;

bool isNumPalindrome(string str);

int main ()
{
    string str;
    str = "10", "32", "222", "abba", "444244", "67867876", "123454321";
    int userExit;

    bool isNum = isNumPalindrome;

    if (isNumPalindrome)
    {
        cout << str << " is a palindrome";
        cout << endl;
    }
    else
    {
        cout << str << " is not a palindrome";
        cout << endl;
    }

    cout << "Press any key to exit: ";
    cin >> userExit;
    cout << endl;

    return 0;
}

bool isNumPalindrome(string str)
{
    int length = str.length();

    for (int i = 0; i < length / 2; i++)
        if (str[i] != str[length - 1 - i])
            return false;

        return true;
}

如您所见,我还没有完全弄清楚如何在 main 中执行一个函数来获取返回并输出一条语句。我需要了解如何测试多个字符串,以及那么如何使用return语句打印cout &lt;&lt; str &lt;&lt; "之类的东西不是回文。”;

【问题讨论】:

  • 另外我知道我已经包含了不需要的标题,并且我在声明 isNum 为 isNumPalindrome 的地方停止了,所以它已经不正确了。
  • 您需要阅读有关如何在 C++ 中调用和使用函数的知识。这有很多问题。
  • 我知道它的边缘非常粗糙。如果我被允许使用用户输入,我不会有任何问题。但我开始了,这让我失望了。
  • 非常粗糙?这在很多方面都是一团糟……您需要查看一些 c++ 教程。你似乎对数组、函数等一无所知。

标签: function return-value palindrome


【解决方案1】:

您对str = "one", "two", "three"; 的使用将str 设置为"three"..., 运算符会这样做。此外,str 可以包含 one 字符串,尝试分配更多是行不通的。您分配给(未定义)变量IsNum 的名称IsNumPalindrome 是一个指向函数的指针,如果您随后询问if(IsNum),它永远不会是空指针,所以总是正确的。

我可以继续。似乎有一行没有严重错误或对 C++ 有严重误解。

【讨论】:

  • 我知道声明多个字符串不起作用,这绝不是我完成的(或原始的)代码。我开始在算法中使用回文函数,返回真假。然后我尝试了一个可变回报,但最终将所有东西都切碎以使其工作。这是一个科学怪人计划。我已经搜索了所有可以解决的问题,但我还没有找到一个结果,但他们在使用我的回文函数测试一组字符串方面给了我任何帮助。
  • 你不测试一组字符串...你只是在循环中调用函数。
  • 我第一次尝试循环时,它对每个字符串都返回 true,即使它们不都是回文。我已经尝试过 if 和 do 重复但没有运气。我知道这段代码真的很烂,这是我第一个使用返回值函数的合法程序。代码不重要,我只是想知道在 7 个字符串上使用这个回文函数的好方法。我脑子有问题。
  • 但是如上所述,这是因为我使用的是指针,并且变量总是返回true。
【解决方案2】:
string str;
str = "10", "32", "222", "abba", "444244", "67867876", "123454321";

改成

std:vector< std::string > vecOfStrings = { "10", "32", "222", "abba", "444244", "67867876", "123454321" };

然后只需循环遍历向量并将每个字符串传递给函数

for (unsigned int i = 0; i < vecOfStrings.size(); i++) {
    if ( isNumPalindrome( vecOfStrings[i] ) ) {
        // do something
    }
}

【讨论】:

  • 这是一个使用数组的好方法。我的导师想通过强迫我们使用低效的方法来实现这个功能来解决这个问题,这就是为什么我还不能使用数组的原因。
  • 不能说我明白学习效率低下的意义。不使用内置函数/容器/算法,这样您就可以了解下面发生的事情是有用的,但这里效率低下实际上只是为每个数字声明一个新字符串,并为每个字符串调用函数。第一次通话后不会教你什么新东西。
  • 这真的只是为了让我们在接下来的章节中使用更好的函数(这些章节将向我们介绍它们)。我很可能最终会使用你的数组,无论它是否能让我取得好成绩。
  • 好吧,我已经放弃了。我需要使用这个数组吗?我要使用它。
  • 你需要#include 才能使用向量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2021-12-08
  • 2012-04-05
相关资源
最近更新 更多