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;
}
我在 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;
}