在我说什么之前,让我发布我的代码。
string formatNumber(llint num){
if (num <= 999) return to_string(num);
vector<char> c;
for (int i = 0; i <= to_string(num).length()-1; i++) {
c.push_back(to_string(num)[i]);
}
auto it = c.end();
for (int i = c.size() - 1; i >= c.size() - 1; i--) {
if (i >= 3 && i % 3 == 0) {
it = c.insert(it + i, ',', 1);
}
it--;
}
string Return;
for (int i = 0; i <= c.size(); i++) {
Return += c[i];
}
return Return;
}
此功能的目的是格式化一个数字多于三位的数字,以使其更容易阅读。像这样:1000将变为1,000。基本上它从左边每3位数添加一个逗号。我的问题是我的程序崩溃并抛出此异常:
Exception thrown at 0x00007FFC24A2C447 (vcruntime140.dll) in RESL.exe: 0xC0000005: Access violation reading location 0x00000223F53C2000.
没有关于如何解决这个问题的线索,你们,善良的堆栈溢出者会帮助我吗?
答案 0 :(得分:1)
您不需要std::vector<char>
因为std::string
本身就拥有您需要的所有功能。使用string会消除大部分代码,只需要一个循环:
std::string s = std::to_string( num );
const auto size = s.length(); // we need to keep it as it would change on insertion
for( size_t i = 3; i < size; i += 3 )
s.insert( size - i, 1, ',' );
答案 1 :(得分:0)
代码中有太多错误,例如:
首先需要知道的是,在顺序容器上执行插入/删除操作时,迭代器可能无效。
上一个i <= c.size()
循环中的语句for
应为i < c.size()
。
实际上,您不需要使用其他vector<char>
。只需使用to_string
生成的字符串即可。