gpt4 book ai didi

C++ 字符串流值提取

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:15 26 4
gpt4 key购买 nike

我正在尝试使用 std::stringstreammyString1 中提取值,如下所示:

// Example program
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
string myString1 = "+50years";
string myString2 = "+50years-4months+3weeks+5minutes";

stringstream ss (myString1);

char mathOperator;
int value;
string timeUnit;

ss >> mathOperator >> value >> timeUnit;

cout << "mathOperator: " << mathOperator << endl;
cout << "value: " << value << endl;
cout << "timeUnit: " << timeUnit << endl;
}

输出:

mathOperator: +
value: 50
timeUnit: years

在输出中你可以看到我成功提取了我需要的值、数学运算符、值和时间单位。

有没有办法对 myString2 做同样的事情?也许在一个循环中?我可以提取数学运算符、值,但时间单位只是提取其他所有内容,我想不出解决这个问题的方法。非常感谢。

最佳答案

问题是 timeUnit 是一个字符串,因此 >>> 将提取第一个空格之前的所有内容,而您的字符串中没有。

备选方案:

  • 您可以使用 getline() 提取部分,它提取字符串直到找到分隔符。不幸的是,您没有一个潜在的分隔符,而是 2 个(+ 和 -)。
  • 您可以选择直接在字符串上使用正则表达式
  • 您最终可以使用 find_first_of() 拆分字符串和 substr()

作为说明,这里是使用正则表达式的示例:

  regex rg("([\\+-][0-9]+[A-Za-z]+)", regex::extended);
smatch sm;
while (regex_search(myString2, sm, rg)) {
cout <<"Found:"<<sm[0]<<endl;
myString2 = sm.suffix().str();
//... process sstring sm[0]
}

这里是live demo应用您的代码来提取所有元素。

关于C++ 字符串流值提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903847/

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