c++ - 力扣 65 : Valid Number (C++)

标签 c++ string algorithm boost

我想在将 input_string 传递给 if 语句中的 regex_match 之前向左/向右修剪,但我没有成功尝试boost trim_right and trim_left ,但不确定如何解决。

如何简单地修剪输入,使前两个输入 "0 ""0.1 " 成为有效数字?

#include <string>
#include <boost/algorithm/string.hpp>

#include <iostream>
#include <regex>
#include <vector>
using namespace std;

int main() {
    vector<string> string_vector = {"   0  ","   0.1   ","abc","1 a","2e10","-90e3","1e","e3","6e-1","99e2.5","53.5e93","--6","-+3","95a54e53"};

    regex expression_two("^[+-]?(?:[0-9]*\\.[0-9]+|[0-9]+\\.[0-9]*|[0-9]+)[Ee][+-]?[0-9]+$|^[+-]?(?:[0-9]*\\.[0-9]+|[0-9]+\\.[0-9]*|[0-9]+)$|^[+-]?[0-9]+$");

    for (const auto &input_string: string_vector) {
        if (std::regex_match(input_string, expression_two))
            cout << "[0-9] Char Class: '" << input_string << "' is a valid number." << endl;
    }
    return 0;
}

当前输出

[0-9] Char Class: '2e10' is a valid number.
[0-9] Char Class: '-90e3' is a valid number.
[0-9] Char Class: '6e-1' is a valid number.
[0-9] Char Class: '53.5e93' is a valid number.

期望的输出

[0-9] Char Class: '  0  ' is a valid number.
[0-9] Char Class: '  0.1  ' is a valid number.
[0-9] Char Class: '2e10' is a valid number.
[0-9] Char Class: '-90e3' is a valid number.
[0-9] Char Class: '6e-1' is a valid number.
[0-9] Char Class: '53.5e93' is a valid number.

最佳答案

最大的问题是std::regex_match需要一个持久的字符串对象供结果引用。如果你没有,那么在检查结果后将访问一个不存在的字符串,这是未定义的行为。这意味着您需要修改循环以使用 What's the best way to trim std::string? 中的 trim_copy喜欢

for (const auto &input_string: string_vector) {
    auto trimmed = trim_copy(input_string);
    if (std::regex_match(trimmed, expression_two))
        cout << "[0-9] Char Class: '" << input_string << "' is a valid number." << endl;
}

这将花费您一份拷贝,但这是在不修改源数据的情况下执行此操作的唯一方法。如果您可以修改源数据,那么您可以使用

for (auto &input_string: string_vector) {
    if (std::regex_match(trim(input_string), expression_two))
        cout << "[0-9] Char Class: '" << input_string << "' is a valid number." << endl;
}

相反。

关于c++ - 力扣 65 : Valid Number (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58417404/

相关文章:

algorithm - 给定大小的非相邻集的数量

C++:将 POD 添加到 std::vector<char> 中的下一个位置

c++ - 在 gdbus 自省(introspection) xml 中添加元组

c - 如何访问给定指针的数据?

c++ - 函数调用无法正常工作

algorithm - 文本处理的形式化方法

c++ - 如何系统地更新我曾经从二进制手动安装的C++依赖项

c++ - 为什么一个虚类的析构函数没有自动添加到虚表中?

javascript - 如何在书写时删除/trim 空格或制表符?

java - 寻求有关实现堆数据结构的帮助