对于我的代码,用户输入位置的经度和纬度以及位置的名称。例如,"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
中提取了上述内容并对其进行了更改,而不是我自己的代码:)