gpt4 book ai didi

获取子字符串的 C++ 代码

转载 作者:太空狗 更新时间:2023-10-29 23:41:23 25 4
gpt4 key购买 nike

我有一个字符串“1.0.0”,我想提取“1”、“0”和“0”。如果最后一个零不存在,则字符串必须默认存储 0:

verstr.substr(0,verstr.find(".");

上面的语句可以找到第一个是“1”的数字,但是,我想不出提取字符串剩余部分的解决方案。

在此之后我将它转换为 long as:

        va = atol(verstr.substr(0,verstr.find(".")).c_str());

所以我想要 va 中的“1”,“vb”中的 0 等等

谢谢。

最佳答案

C++11 解决方案:

#include <iostream>
#include <string>
#include <regex>

using namespace std;

int main(int, char **) {
string version("1.2.3");
match_results<string::const_iterator> m;
regex re("([0-9]+)\\.([0-9]+)(\\.([0-9]+))?");
if (regex_match(version, m, re)) {
int major = stoi(m[1].str()),
minor = stoi(m[2].str()),
rev = stoi(m[4].str().length() == 0 ? 0 : m[4].str());
cout << "major: " << major << endl;
cout << "minor: " << minor << endl;
cout << "rev: " << rev << endl;
} else {
cout << "no match\n";
}
}

使用的正则表达式是 ([0-9]+)\.([0-9]+)(\.([0-9]+))? 并分解为如下:

[0-9]+ 匹配一个或多个数字

\. 匹配文字点。

? 跟在最后一个表达式后面表示它是可选的

包裹在( and )中的表达式是捕获组。此表达式中有五个捕获组:

0 - 始终匹配整个字符串 - 我们不使用它。

1 - 匹配主版本号。

2 - 匹配次要版本号。

3 - 匹配一个点后跟修订号 - 我们不使用它,但它是必需的,因为我们使用括号后跟 ? 使整个组可选。

4 - 匹配修订号。

关于获取子字符串的 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11759981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com