输入一个字符串在 C 中修改它并输出它
在这个例子中,我们在 MATLAB MEX 中说明了字符串操作。我们将创建一个 MEX 函数,它接受一个字符串作为 MATLAB 的输入,将数据复制到 C 字符串,修改它并将其转换回 mxArray
返回到 MATLAB 端。
这个例子的主要目的是展示如何从 MATLAB 将字符串转换为 C / C++,反之亦然。
stringIO.cpp
#include "mex.h"
#include <cstring>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
// check number of arguments
if (nrhs != 1 || nlhs > 1) {
mexErrMsgIdAndTxt("StringIO:WrongNumArgs", "Wrong number of arguments.");
}
// check if input is a string
if (mxIsChar(prhs[0])) {
mexErrMsgIdAndTxt("StringIO:TypeError", "Input is not a string");
}
// copy characters data from mxArray to a C-style string (null-terminated)
char *str = mxArrayToString(prhs[0]);
// manipulate the string in some way
if (strcmp("theOneString", str) == 0) {
str[0] = 'T'; // capitalize first letter
} else {
str[0] = ' '; // do something else?
}
// return the new modified string
plhs[0] = mxCreateString(str);
// free allocated memory
mxFree(str);
}
此示例中的相关功能是:
mxIsChar
测试mxArray
是否属于mxCHAR
型。mxArrayToString
将mxArray
字符串的数据复制到char *
缓冲区。mxCreateString
从char*
创建一个mxArray
字符串。
作为旁注,如果你只想读取字符串而不是修改它,请记住将其声明为 const char*
以获得速度和稳健性。
最后,编译后我们可以从 MATLAB 中调用它:
>> mex stringIO.cpp
>> strOut = stringIO('theOneString')
strOut =
TheOneString
>> strOut = stringIO('somethingelse')
strOut=
omethingelse