1

再会!有什么方法可以告诉 matlab 我的函数的输入是一个字符串。例如thisisastring(11A)

我预期的输入是二进制字符串(010011101)和十六进制(1B)。你能帮我解决这个问题吗?

4

3 回答 3

3

ischariscellstr可以告诉您输入是 char 数组还是包含字符串的元胞数组(char 数组)。

bin2dechex2dec将字符串转换为数字。

于 2012-09-27T03:44:37.867 回答
2

要检查函数中参数的数据类型,并断言它们符合其他标准,如数组维度和值约束,请使用validateattributes。很方便,标准的matlab。

于 2012-09-27T05:52:45.393 回答
1

与许多语言不同,Matlab 是动态类型的。所以真的没有办法告诉 Matlab 一个函数总是会用一个字符串输入来调用。如果需要,您可以在函数开头检查输入的类型,但这并不总是正确的答案。因此,例如,在 Java 中,您可以编写如下内容:

public class SomeClass {
    public static void someMethod(String arg1) {
        //Do something with arg1, which will always be a String
    }
}

在 Matlab 中,您有两种选择。首先,您可以假设它是一个字符串来编写代码,如下所示:

function someFunction(arg1)
%SOMEFUNCTION  Performs basic string operations
%    SOMEFUNCTION('INPUTSTRING')  performs an operation on 'INPUTSTRING'.

%Do something with arg1, which will always be a string.  You know 
%    this because the help section indicates the input should be a string, and 
%    you trust the users of this function (perhaps yourself)

或者,如果您偏执并想编写健壮的代码

function someFunction(arg1)
%SOMEFUNCTION  Performs basic string operations
%    SOMEFUNCTION('INPUTSTRING')  performs an operation on 'INPUTSTRING'.

if ~ischar(arg1)
    %Error handling here, where you either throw an error, or try 
    %    and guess what your user intended. for example
    if isnumeric(arg1) && isscalar(arg1)
        someFunction(num2str(arg1));
    elseif iscellstr(arg1)
        for ix = 1:numel(arg1)
            someFunction(arg1{1});
        end
    else
        error(['someFunction requires a string input.  ''' class(arg1) ''' found.'])
    end
else
    %Do somethinbg with arg1, which will always be a string, due to the IF statement
end
于 2012-09-27T05:21:47.273 回答