QString - 用地理坐标解析 QString

QString - parsing QString with geoordinates

我在 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"

我必须怎么做才能按照我说的那样运行我的程序?
我需要真正的代码。谢谢

最简单的开始方式是 string.split(' ') - 这将生成由 space 字符 (' ') 分隔的字符串组件列表。如果您确定字符串的格式总是完全像这样,您可以先删除所有特殊字符(° 等等)。

然后分析结果QStringList。同样,如果格式是固定的,您可以检查列表项的数量是否与预期数量匹配,然后将度数作为 list[0],分钟作为 ``list[1]` 等等。

另一种选择是使用 QRegExp 来解析字符串(根据正则表达式将其拆分为子字符串),但我发现它对于 split 也能正常工作的用例来说太复杂了。

"I need code" 不是您应该问的那种问题,SO 是关于 "gimme knowledge" 而不是 "do my work" 的问题。一个好的问题应该展示你为解决问题所做的努力,这样人们才能告诉你你做错了什么。您的问题不仅没有任何这样的努力,而且即使 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;
}