我在C++编写一个程序来找到所有的解决方案一b = c ^,其中一个,b和c ^一起使用所有的数字0-9只出现一次.该方案在循环值一和b,并且在每次跑了数字计数程序一,b和一个b以检查是否数字的条件感到满意.
然而,当可以产生伪解一个b溢出整数限制.我最终使用以下代码检查:
unsigned long b, c, c_test;
...
c_test=c*b; // Possible overflow
if (c_test/b != c) {/* There has been an overflow*/}
else c=c_test; // No overflow
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来测试溢出?我知道有些芯片有一个内部标志,当溢出发生时会设置,但我从未见过通过C或C++访问它.
请注意,在C和C++中,签名 int溢出是未定义的行为,因此您必须在不实际导致它的情况下检测它.有关添加前的signed int overflow,请参阅在C/C++中检测带符号的溢出
我试图找到所有可能的单词/标签对或其他嵌套组合与python及其正则表达式.
sent = '(NP (NNP Hoi) (NN Hallo) (NN Hey) (NNP (NN Ciao) (NN Adios)))'
def checkBinary(sentence):
n = re.findall("\([A-Za-z-0-9\s\)\(]*\)", sentence)
print(n)
checkBinary(sent)
Output:
['(NP (NNP Hoi) (NN Hallo) (NN Hey) (NNP (NN Ciao) (NN Adios)))']
Run Code Online (Sandbox Code Playgroud)
寻找:
['(NP (NNP Hoi) (NN Hallo) (NN Hey) (NNP (NN Ciao) (NN Adios)))',
'(NNP Hoi)',
'(NN Hallo)',
'(NN Hey)',
'(NNP (NN Ciao) (NN Adios))',
'(NN Ciao)',
'(NN Adios)']
Run Code Online (Sandbox Code Playgroud)
我认为正则表达式公式可以找到嵌套的括号词/标签对,但它不会返回它们.我该怎么做?
根据规格strtol:
如果主题序列具有预期形式且base的值为0,则以第一个数字开头的字符序列应解释为整数常量.如果主题序列具有预期的形式且base的值在2到36之间,则它应被用作转换的基础,将其值归于每个字母,如上所述.如果主题序列以减号开头,则转换产生的值应予以否定.如果endptr不是空指针,则指向最终字符串的指针应存储在endptr指向的对象中.
手头的问题是,在否定之前,价值不在范围内long.例如,在C89中(整数常量不能采用类型long long),写入-2147483648可能是溢出; 你必须写(-2147483647-1)或类似.
由于使用"整数常量"的措辞可以被解释为对整数常量的类型应用C规则,这可能足以使我们从这里保存未定义的行为,但同样的问题(没有这么容易的)将适用于strtoll.
编辑:最后,请注意,即使它确实溢出,也应返回"正确"值.所以这个问题实际上只是关于errno在这种情况下是否可以设置.