【发布时间】:2021-02-05 01:01:02
【问题描述】:
我正在学习我的第一门 cs 课程,目前正在学习验证数字输入的不同方法。下面是我为检查逗号位置而编写的一个布尔函数,但是当我输入 65,000 时,它认为逗号在错误的位置。
bool commas(string input) {
bool commas = true;
long len = input.length();
int counter = 0;
for(int z = len-1; z >= 0; --z) {
if(counter == 3) {
if(input[z] != ',') {
commas = false;
counter = 0;
}
}
else {
if(input[z] == ',') {
commas = false;
}
else {
++counter;
}
}
}
return commas;
}
【问题讨论】:
-
如果从字符串的右侧开始向后循环而不是从左侧循环不是更容易吗?
-
65,000中的逗号位于索引2。在索引4它有一个0。我建议您考虑z距离字符串的end 有多远,而不是距离开头有多远。毕竟,1,000,000在索引2和6处有逗号,而10,000,000在索引3和7处有逗号。 -
还要考虑误报的风险。我假设您不想要认为
1,0,0,0,0,0,0在正确位置有逗号的东西。您将如何检测到这一点? -
之所以要从右边开始往后走,是因为每次迭代必须有正确的字符。如果您像现在一样从左侧开始,您不知道
5之后的,是否有效——您必须等到您到达字符串中的某个位置才能说“哦,对了,我之前看到的那个逗号真的不好”。比如65,00——从左边开始往前走怎么知道逗号在正确的位置?现在从右边开始往回走——那个逗号马上就知道是坏的。 -
c++14 还提供了 digit separator 功能。
标签: c++ validation for-loop boolean numeric