輸入一個字串在 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 型。
  • mxArrayToStringmxArray 字串的資料複製到 char *緩衝區。
  • mxCreateStringchar*建立一個 mxArray 字串。

作為旁註,如果你只想讀取字串而不是修改它,請記住將其宣告為 const char*以獲得速度和穩健性。

最後,編譯後我們可以從 MATLAB 中呼叫它:

>> mex stringIO.cpp

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

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