QString - 使用geoordinates解析QString

时间:2016-01-16 10:44:58

标签: c++ string qt parsing qstring

我在Qt Creator(社区)5.5.1工作。例如,我有

  

string = “44°36'14.2 \”N,33°30'58.6 \“ E,0m”

QString的

。我知道,我必须解析它,但我不知道如何,因为我从来没有遇到像这样的问题。从我们的字符串中我想得到一些其他较小的字符串:

  

cgt = “44”; cmt = “36”; cst = “14.2”

     

cgg = “33”; cmg = “30”; csg = “58.6”

我的工作方式我该怎么办? 我需要真正的代码。感谢。

2 个答案:

答案 0 :(得分:1)

最简单的启动方式是string.split(' ') - 这将产生由空格字符(' ')分隔的字符串组件的列表。如果您确定字符串的格式始终与此格式完全相同,则可以先删除所有特殊字符(°等)。

然后分析得到的QStringList。同样,如果格式是固定的,您可以检查列表项的数量是否与预期数量匹配,然后将度数设为list[0],将分钟设为“list [1]”,依此类推。

另一个替代方法是使用QRegExp来解析字符串(根据正则表达式将其拆分为子字符串),但我发现它对于split同样有用的用例来说太复杂了。

答案 1 :(得分:0)

"我需要代码"不是你应该问的那种问题,所以关于" gimme knowledge"不是"做我的工作"的问题。一个好问题应该证明你努力解决问题,所以人们可以告诉你你做错了什么。你的问题不仅没有任何这样的努力,而且即使Devopia为你完成了一半的工作,你也没有花费任何费用。请记住以后的问题。

struct G {
    double cgt, cmt, cst, cgg, cmg, csg;
};

G parse(QString s) {
    QStringList list = s.split(QRegExp("[^0-9.]"), QString::SkipEmptyParts);
    G g;
    g.cgt = list.at(0).toDouble();
    g.cmt = list.at(1).toDouble();
    g.cst = list.at(2).toDouble();
    g.cgg = list.at(3).toDouble();
    g.cmg = list.at(4).toDouble();
    g.csg = list.at(5).toDouble();
    return g;
}