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

           

以上是 MATLAB输入字符串,在C中进行修改,然后输出 的全部内容, 来源链接: utcz.com/z/321354.html

回到顶部