【问题标题】:C++ Find a Character after the Previous Character in a Character ArrayC++ 在字符数组中查找前一个字符之后的字符
【发布时间】:2014-05-07 02:03:53
【问题描述】:

我正在做一个在两个多项式之间进行运算的项目。多项式是从我命名为“functions.txt”的文本文件中读取的,格式为“(2*x^2+5*x^4-3*x)+(6*x+2 *x^3+x^5)”。这些方程的数量未知,运算可以是“-”、“+”或“”。我已经设法读入文件并将每个字符存储到一个字符数组中。在这一点上,我很难找到数学运算符(''、'-' 或 '+')。我想在字符串中找到')'并立即将其后的字符存储到mathOperator中;如果 ')' 后面的字符不是 '\0'。但是,这似乎不起作用,因为它返回“”。非常感谢任何建议和帮助。这就是问题所在:

if(polyFile.good())
{
    while(!polyFile.eof() && counter < MAX_SIZE)
    {
        polyFile.get(polyArray[counter]);
        ++counter;
    }

    polyArray[counter - 1] = '\0';

    for(int i = 0; i < polyFile.eof(); ++i)
    {
        if(polyArray[i] = ')')
        {
            polyArray[i + 1] = mathOperator;
            cout << mathOperator;
        }
    }

}
else
{
    cout << "The file could not be opened." << endl;
}

【问题讨论】:

  • 一个问题——你想出这种方法来处理多项式吗?如果你这样做了,那么我会告诉你,这通常是编写一个语法/解析器,而不是试图以一种特别的方式一次挑选一个字符。
  • 我最初将信息放入一个字符串数组中,但我认为对于这个项目,我应该将每个字符放入一个字符数组中,因为稍后我需要比较每个值来执行操作。我在 C++ 和一般编程方面的经验也非常有限。
  • 问题不是字符数组或 C++ 问题。真正的问题是,您的方法将无法适用于与您正在使用的测试用例略有不同的任何东西。如果括号是嵌套的怎么办?超过 1 位的数字怎么办?运算顺序如何,乘法和除法在加法和减法之前完成?请在此处查看表达式解析以及正确执行此操作所涉及的内容:stackoverflow.com/questions/11703082/…
  • 也在这里:codeproject.com/Articles/88435/… 基本上,您可能是一名优秀的 C++ 程序员,但在解决这些问题时使用了错误的方法。正确的做法是有一个语法,然后根据那个语法进行解析。
  • 感谢大家的帮助。我已经完全改变了我对这个程序的处理方式,并且几乎完成了它。但是,该程序似乎输出了错误的答案,我似乎无法弄清楚原因。如果有人感兴趣,我已经重新发布。 stackoverflow.com/questions/23531571/…

标签: c++ arrays find character


【解决方案1】:

这个区块有一些问题

for(int i = 0; i < polyFile.eof(); ++i)
{
    if(polyArray[i] = ')')
    {
        polyArray[i + 1] = mathOperator;
        cout << mathOperator;
    }
}

1/ 在for循环中,你要使用i

2/ 在 if 语句中,你可能想使用 if(!strcmp(polyArray[i], ")")); "=" 是赋值运算符,而不是比较运算符

3/ 这一行:

polyArray[i + 1] = mathOperator;

意味着您将 mathOperator 分配给 polyArray[i+1],而不是将 polyArray[i+1] 中的任何内容存储给 mathOperator。这是你想要的:

mathOperator = polyArray[i + 1];

【讨论】:

  • 谢谢。这有很大帮助。我犯了一些愚蠢的错误,但它在每一行的最后一个 ')' 之后都出现了 "。编译器是否将其视为常规字符?
  • 没关系,我设法解决了它。再次感谢你的帮助。非常感谢。
【解决方案2】:

这一行

for(int i = 0; i < polyFile.eof(); ++i)

应该使用counter 来遍历数组

for(int i = 0; i < counter - 1; ++i)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    相关资源
    最近更新 更多