将整数与字符串分开

时间:2017-10-26 11:42:38

标签: c++

我有一个解压缩文本文件的程序。如果输入为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个数字后所说的那样,它进入了无限循环。 请帮忙

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

static const std::regex expr{ "(\\d)*[a-zA-Z]" }; // zero or more digits + letter

std::string uncompress(std::string_view const& input)
{
    char what{ '\0' };
    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);
}

Demo中,次要修改允许在搜索输入时调用此方法。还展示了输入消毒。