【发布时间】:2016-01-04 14:58:12
【问题描述】:
给定一个应该代表一个数字的字符串,我想把它放入一个转换函数中,如果 整个 字符串没有转换,它会提供通知。
输入:"12":
-
istringstream::operator>>输出 12 -
atoi输出 12 -
stoi输出 12
对于输入"1X",我想要一个失败响应,但我得到了:
-
istringstream::operator>>输出 1 -
atoi输出 1 -
stoi输出 1
对于输入"X2":
-
istringstream::operator>>输出 0 并设置错误标志 -
atoi输出 0 -
stoi抛出错误
有没有办法在输入"1X" 上引发错误行为?
【问题讨论】:
-
@deepmax 是的,出于最小示例的目的,我没有包含它,但在我的本地测试代码中,我在循环的顶部执行此操作:
cout << "\tinput string: " << i << (all_of(i, i + strlen(i), bind(isdigit, placeholders::_1)) ? " is good\n" : " is bad\n");但是,即使虽然我可以检查这种方式我不想。所有其他函数也必须逐步遍历每个字符,我希望有一种方法来利用他们已经知道的内容。 -
@deepmax 你错了,这不是重复的,这些答案不是地址验证整个字符串已被读取。
-
我同意这不是重复的。它提出了一个不同的问题,链接的答案没有回答这个问题。 @deepmax 你应该取消标记它。
-
不管怎样,答案是:int pos; int n = stoi(mystring, &pos); if (pos != mystring.length()) 它不是数字。
标签: c++ string atoi string-conversion extraction-operator