3

我需要确定一个字符串是否只包含一个整数。内置功能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);

我缺少哪个基本功能?

4

2 回答 2

5

你可以用regexp; 并避免您使用的循环cellfun

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

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

请注意,cellfun使用内置函数'isempty'非常快。

于 2013-10-11T13:36:17.023 回答
2

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

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

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

此代码利用了十进制数字按ASCII和 Unicode 顺序编码的事实。

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

isintstr = all(strtrim(myString) >= '0') && all(strtrim(myString) <= '9')
于 2013-10-11T13:41:32.280 回答