輸入一個字串在 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