C ++将字符串动态转换为任何基本类型

时间:2010-11-23 09:03:09

标签: c++ xml string parsing

在C ++中,我需要在运行时将字符串转换为任何类型,我不知道我可能在字符串中获得什么类型。我听说有一个lexical_cast在boost中我可以使用,但是实现它的最有效方法是什么?

我可能从客户端获得一堆这样的字符串:Date =“25/08/2010”,Someval =“2”,Blah =“25.5”。

现在我希望能够将这些字符串转换为它们的类型,例如,Somval显然是一个int,而Date可以是boost :: date或者其他什么。关键是,我现在还不知道这些会给我的顺序是什么,因此很难编写一些会执行大量演员表的代码。

我可以使用一堆if / else语句或switch / case语句,但我认为可能有更好的方法来执行此操作。

我不是在寻找与lexical_cast不同的东西,我可以完全使用它,我希望看到有人知道更好的方法然后这样做:

std::string str = "256";
int a = lexical_cast<int>(str);

//now check if the cast worked, if not, try another... 

这是一个猜谜游戏太多了,如果我有10种可能的类型,对于任何给定的字符串,它听起来有点无效。特别是如果它在任何给定的时间必须做1000个。

有人可以建议吗?


Alex Brown 注意事项 - 示例字符串是来自客户端的XML数据的一个片段。

5 个答案:

答案 0 :(得分:2)

使用XML解析器读取XML数据,它将为您完成几乎所有的工作,并处理订购问题。然后,您只需要向解析器询问计算所需的数据。

详细信息因不同的XML解析器而异 - 请找一个,阅读文档。如果您需要更多帮助,请回到此处,提出XML解析器问题。

答案 1 :(得分:0)

GMan是对的,如果底层数据结构不同,则不能将任意字符串转换为例如Date类型。但是,您可以使用字符串中的数据解析内容并实例化新对象。例如,std :: atoi()将c-string解析为int。 你需要解析字符串,而不是强制转换它。

答案 2 :(得分:0)

您可以使用VARIANT类型的结构(即每个可能结果中的一个,以及指定它的“类型”,以及类型的大枚举)和ConvertStringToVariant()函数。

答案 3 :(得分:0)

您所描述的实际上是一个解析器。即使使用lexical_cast的试错方法实际上只是一个(原始)解析器。

我建议澄清输入字符串的格式,然后,如果它足够简单,可以手动编写Recursive descent parser来将输入字符串解析为任何方便您需要的数据结构。

答案 4 :(得分:0)

  

这太过于猜测游戏,   如果我有10种可能的类型,   任何给定的字符串

如果你担心这一点,你需要一个词法分析器,例如flexBoost::Spirit

它仍然是一个猜谜游戏,但更加“知情”的猜测。