gpt4 book ai didi

C++:仅使用 STL 从字符串中提取标记

转载 作者:太空狗 更新时间:2023-10-29 21:26:39 24 4
gpt4 key购买 nike

我想从作为字符串传递的给定分数表达式中提取标记,

Fraction s("-5 * 7/27");

提取的标记将单个运算符或数字序列作为操作数,仅使用 STL 容器。

有人可以指导我这样做吗?我想知道如何提取标记并将操作数与运算符区分开来,谢谢。

最佳答案

假设 token 之间总是有空格,下面是将它们全部放入队列的方法:

#include <string>
#include <queue>
#include <sstream>
#include <iostream>

using namespace std;

int main()
{
stringstream formula("-5 * 7/27");
string a_token;
queue<string> tokens;

// Use getline to extract the tokens, and then push them onto the queue.
while (getline(formula, a_token, ' ')) {
tokens.push( a_token );
}

// Print and pop each token.
while (tokens.empty() == false) {
cout << tokens.front() << endl;
tokens.pop();
}
}

运行程序会输出:

-5
*
7/27

现在要确定哪些是运算符、数字或分数,您可以在循环中执行如下操作:

    if (a_token == "+" || a_token == "-" || a_token == "*" || a_token == "/")
{
// It's an operator
cout << "Operator: " << a_token << endl;
}
else
{
// Else it's a number or a fraction.

// Now try find a slash '/'.
size_t slash_pos = a_token.find('/');

// If we found one, it's a fraction.
if (slash_pos != string::npos) {
// So break it into A / B parts.

// From the start to before the slash.
string A = a_token.substr(0, slash_pos);

// From after the slash to the end.
string B = a_token.substr(slash_pos + 1);

cout << "Fraction: " << A << " over " << B << endl;
}
else
{
// Else it's just a number, not a fraction.
cout << "Number: " << a_token << endl;
}
}

本网站:http://www.cplusplus.com/reference/string/string/将为您提供有关字符串函数的信息。

修改代码并再次运行后,你会得到这样的输出:

Number: -5
Operator: *
Fraction: 7 over 27

关于C++:仅使用 STL 从字符串中提取标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10876071/

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