如何确定字符串是否表示整数?

时间:2013-10-11 13:23:07

标签: matlab integer string-comparison

我需要确定一个字符串是否只包含一个整数。内置函数isinteger无效。

为了避免循环,我想在字符串的单元格数组上应用此任务。 例如:

Q = { 'qf5' ; '4' ; 'true' ; 'false' ; '4.00' ; '4E0' ; '4e0' ; '657' }; 

期望的结果:

integers = 0  1  0  0  0  0  0  1

对于单个字符串,我想出了一个丑陋的解决方法,但我无法想象这是唯一可能的方法,而且它还需要一个循环才能在单元数组上使用它:

myString = '4';
integer = uint64( str2double( myString ) );
newString = int2str( integer );
isStringInteger = strcmp(newString,myString);

我遗失了哪些基本功能?

2 个答案:

答案 0 :(得分:5)

您可以使用regexp执行此操作;并且为了避免循环,您使用cellfun

~cellfun('isempty', regexp(Q, '^-?\d+$'))

这将“整数”视为一串数字,可能在开头有一个减号。

请注意,内置函数cellfun的{​​{1}}非常快。

答案 1 :(得分:2)

嗯,字符串 不是整数,因此问题不正确。您要检查的是字符串是否是整数的表示。 isinteger函数也不是您想要的,因为它不会检查数值变量的实际内容是否为整数,而是数据类型是整数类型。

据我所知,没有内置的方法来检查字符串是否代表整数。实现这种检查的一种方法是查看字符串中的所有字符是否代表数字:

isintstr = all(myString >= '0') && all(myString <= '9')

此代码利用了小数位在ASCII和Unicode中按顺序编码的事实。

要允许前导和尾随空格,请使用

isintstr = all(strtrim(myString) >= '0') && all(strtrim(myString) <= '9')