MATLAB输入字符串,在C中进行修改,然后输出
示例
在此示例中,我们说明了MATLABMEX中的字符串操作。我们将创建一个MEX函数,该函数接受来自MATLAB的字符串作为输入,将数据复制到C字符串中,对其进行修改,然后将其转换回mxArrayMATLAB端。
此示例的主要目的是说明如何将字符串从MATLAB转换为C/C++,反之亦然。
stringIO.cpp
#include "mex.h" #include <cstring> void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { //检查参数数量 if (nrhs != 1 || nlhs > 1) { mexErrMsgIdAndTxt("StringIO:WrongNumArgs", "参数数量错误。"); } //检查输入是否为字符串 if (mxIsChar(prhs[0])) { mexErrMsgIdAndTxt("StringIO:TypeError", "Input is not a string"); } //将字符数据从mxArray复制到C样式的字符串(以Null结尾) char *str = mxArrayToString(prhs[0]); //以某种方式操作字符串 if (strcmp("theOneString", str) == 0) { str[0] = 'T'; //大写第一个字母 } else { str[0] = ' '; //还有其他事吗 } //返回新的修改后的字符串 plhs[0] = mxCreateString(str); //空闲分配的内存 mxFree(str); }
此示例中的相关功能为:
mxIsChar测试anmxArray是否为mxCHAR类型。
mxArrayToString将mxArray字符串的数据复制到char*缓冲区。
mxCreateString从创建一个mxArray字符串char*。
附带说明一下,如果您只想读取字符串,而不要修改它,请记住将其声明为constchar*具有速度和鲁棒性。
最后,编译后,我们可以从MATLAB中调用它:
>> mex stringIO.cpp >> strOut = stringIO('theOneString') strOut = TheOneString >> strOut = stringIO('somethingelse') strOut= omethingelse