我需要确定一个字符串是否只包含一个整数。内置函数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);
我遗失了哪些基本功能?
答案 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')