首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用strtok来使用c++标记表达式

如何使用strtok来使用c++标记表达式
EN

Stack Overflow用户
提问于 2015-06-18 17:42:16
回答 2查看 473关注 0票数 1

我需要用strok来标记一个数学表达式.我做了一些事情,但是当我运行代码得到2x4y6,这个输出时,我无法获得向量的分隔符,如何获得向量的分隔符,以及如何获得像2x + 4y ^6-3这样的输出?

代码语言:javascript
复制
int main()
    {
    vector<string> finalVector;
        char input[1024]="2x+4y^6-3";
        char *token = strtok(input, "^+-/()/t");
        while (token != NULL) {
            finalVector.push_back(token);

                    token = strtok(NULL, "^+-/()/t");
                    }
        for (int i = 0; i < finalVector.size(); i++)
            cout << finalVector.at(i) << " ";
        return 0;
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-18 18:05:35

strtok用空字符替换已找到的分隔符。分隔符不可挽回地消失了。

如果在第一次调用strtok之前复制字符串,则可以恢复分隔符:

代码语言:javascript
复制
char* to_strtok = strdup(input);
const char* delims = "^+-/()/t";
char* token;
for (token = strtok(to_strtok, delims);
     token != 0;
     token = strtok(0, delims))
{
  char delim = input[token - to_strtok + strlen(token)];
  if (delim != '\0')
  {
     printf ("token=\"%s\" delim='%c'\n", token, delim);
  }
  else
  {
     printf ("last token=\"%s\"n", token);
  }

}

票数 1
EN

Stack Overflow用户

发布于 2015-06-18 18:14:08

我知道你的问题是关于如何用strtok来做这件事的,但我的感觉是,这最终会给你带来痛苦。我认为您至少应该考虑使用boost令牌程序,它支持这一点。实际上,boost支持丢弃和保存分隔符的组合;保存的分隔符存储为它们自己的标记:

代码语言:javascript
复制
// char_sep_example_2.cpp
#include <iostream>
#include <boost/tokenizer.hpp>
#include <string>

int main()
{
  std::string str = ";;Hello|world||-foo--bar;yow;baz|";
  typedef boost::tokenizer<boost::char_separator<char> > 
      tokenizer;
  boost::char_separator<char> sep("-;", "|", boost::keep_empty_tokens);
  tokenizer tokens(str, sep);
  for (tokenizer::iterator tok_iter = tokens.begin();
      tok_iter != tokens.end(); ++tok_iter)
      std::cout << "<" << *tok_iter << "> ";

  std::cout << "\n";
  return 0;
}

The output is:
<> <> <Hello> <|> <world> <|> <> <|> <> <foo> <> <bar> <yow> <baz> <|> <>

这很容易做到你想要的。我猜这能帮你节省很多时间。参考资料:separator.htm

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30922167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档