在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数据的一个片段。
答案 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)