如何根据某些字符拆分字符串?经度纬度

How to split strings based on certain characters? Longitude latitude

本文关键字:字符串 经度 纬度 拆分 字符 何根      更新时间:2023-10-16

对于我的代码,用户输入位置的经度和纬度以及位置的名称。例如,"33.9425/N 118.4081/W 洛杉矶国际机场"。然后,程序使用经度和纬度计算一些信息。我对 c++ 比较陌生,但我想使用 python 的字符串切片。但是,我永远不确定坐标会有多少位数,所以我无法手动切片。在 c++ 中是否有办法只让数字达到某个字符?例如,只得到 33.9425 和 118.4081?

是的,您可以使用

string s {"abc"};
s.find("b");

以计算符号的首次出现,然后使用 substr(( 方法对字符串进行切片。

这是一个经典的正则表达式问题。看看 std::regex。我可能会自己用std::regex_iterator来做这件事。这应该有效:

#include <regex>
#include <iterator>
#include <iostream>
#include <string>
int main()
{
    const std::string s = "33.9425/N 118.4081/W Los Angeles International Airport";
    std::regex words_regex("\d+\.\d+");
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), words_regex);
    auto words_end = std::sregex_iterator();
    std::cout << "Found " 
              << std::distance(words_begin, words_end) 
              << " numbers:n";
    for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
        std::smatch match = *i;                                                 
        std::string match_str = match.str(); 
        std::cout << match_str << 'n';
    }   
}

输出:

Found 2 numbers:
33.9425
118.4081

完全披露:我只是从 cppreference.com 的示例中std::regex_iterator中提取了上述内容并对其进行了更改,而不是我自己的代码:)