将整数与字符串分开

Separate the integers from a string

本文关键字:字符串 整数      更新时间:2023-10-16

我有一个解压缩文本文件的程序。如果输入为4A,则应打印"AAAA"。我的问题是当我尝试分离字符串中包含的整数时,因为在程序读取 3 个数字后,它似乎进入了一个无限循环。这是我的代码:

while (getline(cin, line)){
    for(i = 0; i<line.length(); i++) {
        char * x = &line.at(i);
        if(isdigit(line.at(i))){
           counter = atoi (x);
        }
       ...............
 **Do Something**

我试图在获得值后立即打印 char x,但正如我在读取 3 个数字后所说,它进入了一个无限循环。请帮忙

提前谢谢。

您在内部第二个 for 循环中使用变量 i(重置 i 的值),因此是无限循环。

这是一个没有手写循环的版本,使用正则表达式和字符串视图:

static const std::regex expr{ "(\d)*[a-zA-Z]" }; // zero or more digits + letter
std::string uncompress(std::string_view const& input)
{
    char what{ '' };
    unsigned long rep{ 1 };
    if (std::regex_match(input.begin(), input.end(), expr))
    {
        char *end = const_cast<char*>(&input.back()) - 1;
        rep       = 1 == input.size() ? 1 : strtoul(input.data(), &end, 10);
        what      = input.back();
    }
    return std::string(rep, what);
}

演示中,微小的修改允许在搜索输入时调用它。还展示了输入清理。