我有一个解压缩文本文件的程序。如果输入为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个数字后所说的那样,它进入了无限循环。 请帮忙
提前致谢。
答案 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中,次要修改允许在搜索输入时调用此方法。还展示了输入消毒。