如果声明无法识别加号

时间:2014-03-09 03:36:07

标签: c++ if-statement polynomial-math

我试图创建一个程序来计算多项式表达式的简化版本。我想分离所有变量和常量(带加号),但我的程序似乎没有识别我的字符串中的一些加号:

string al("2x+2+6y+8^7");
vector<string> variableStorage;
for (auto &c : al)
{
    static int count = 0;
    static int lastcount = 0;
    if(c == '+' || count == al.length()-1)
    {
        static int spot(0);
        variableStorage.push_back(al.substr(lastcount, count));
        lastcount = count+1;
        ++spot;
    }
    ++count;
}
for(auto c : variableStorage)
    cout << c << endl;

当我运行此程序时,我得到以下输出:

    2x
    2+6y
    6y+8^7
    8^7

但我想要的输出是:

    2x
    2
    6y
    8^7

我试着检查我的数学是否有任何错误,但就我所见,这似乎很好。

2 个答案:

答案 0 :(得分:0)

substr采取起始位置和长度。所以你应该打电话给al.substr(lastcount, count-lastcount)

答案 1 :(得分:0)

+

分割字符串(tokenize)
#include <string>
#include <vector>

using namespace std;

// This code from another SO question about splitting strings in C++
// http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c

template < class ContainerT >
void tokenize(const std::string& str, ContainerT& tokens,
              const std::string& delimiters = " ", bool trimEmpty = false)
{
   std::string::size_type pos, lastPos = 0;
   while(true)
   {
      pos = str.find_first_of(delimiters, lastPos);
      if(pos == std::string::npos)
      {
         pos = str.length();

         if(pos != lastPos || !trimEmpty)
            tokens.push_back(ContainerT::value_type(str.data()+lastPos,
                  (ContainerT::value_type::size_type)pos-lastPos ));

         break;
      }
      else
      {
         if(pos != lastPos || !trimEmpty)
            tokens.push_back(ContainerT::value_type(str.data()+lastPos,
                  (ContainerT::value_type::size_type)pos-lastPos ));
      }

      lastPos = pos + 1;
   }
};


int main( void )
{
    string al("2x+2+6y+8^7");
    vector<string> variableStorage;


    tokenize( al, viariableStorage );
    for(auto c : variableStorage)
        cout << c << endl;
    //Your items are in variableStorage at this point
    return( 0 );
}

上面的代码没有经过测试,已经很晚了,我感觉很懒。我希望它能跨越这个概念。