1

良い一日!関数への入力が文字列であることをmatlabに伝える方法はありますか?例えばthisisastring(11A)

私の予想される入力は、2進数(010011101)と16進数(1B)の文字列です。これを手伝ってくれませんか。

4

3 に答える 3

3

ischariscellstrは、入力がchar配列であるか、文字列を含むセル配列(char配列)であるかを示します。

bin2decおよびhex2decは、文字列を数値に変換します。

于 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には2つのオプションがあります。まず、次のように、文字列であると想定してコードを記述できます。

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 に答える