MATLAB输入字符串,在C中进行修改,然后输出

示例

在此示例中,我们说明了MATLAB MEX中的字符串操作。我们将创建一个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*。

附带说明一下,如果您只想读取字符串,而不要修改它,请记住将其声明为const char*具有速度和鲁棒性。


最后,编译后,我们可以从MATLAB中调用它:

>> mex stringIO.cpp

>> strOut = stringIO('theOneString')
strOut = 
TheOneString

>> strOut = stringIO('somethingelse')
strOut=
omethingelse