如何将CString拆分成字符?

时间:2015-12-27 17:03:47

标签: c++ mfc

我有这个CString: “0 2 8 27 29 32 35 48 52 55 58 62 72” 我需要将每个数字放在一个单独的数组元素中。 有人可以帮我这个吗? -ThanX

2 个答案:

答案 0 :(得分:0)

我假设您希望这些数字为整数数组。 std :: vector可能更好用。

std::vector<int> oResult;
CString oMyStr = _T("0 2 8 27 29 32 35 48 52 55 58 62 72");

int iIndex = 0;
CString oToken = oMyStr.Tokenize(_T(" "), iIndex); // Tokenize with space

while ( !oToken.IsEmpty() )
{
    try
    {
        int iNbr = atoi( oToken );
        oResult.push_back(iNbr);
    }
    catch (...) { } // This is bad code, but I'm just lazy.

    oToken = oMyStr.Tokenize(_T(" "), iIndex); // Tokenize with space
}

如果您确实需要数组,可以使用

转换矢量
int* pPointerToArraysFirstElement = &oResult[0];

但是,如果向量为空,则可能会崩溃。

答案 1 :(得分:0)

使用以下代码将各个元素分隔为字符串向量,其中每个元素都作为单独的元素放置。

#include <sstream>
#include <vector>
#include <iostream>
using namespace std;

vector<string> &split(const string &s, char delim, vector<string> &elems) {
    stringstream ss(s);
    string item;
    while (getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}

vector<string> split(const string &s, char delim) {
    vector<string> elems;
    split(s, delim, elems);
    return elems;
}

int main()
{
    string s = "0 2 8 27 29 32 35 48 52 55 58 62 72";
    vector<string> elemsVec = split(s, ' ');
    vector<string>::iterator it;
    for(it = elemsVec.begin(); it != elemsVec.end(); ++it)
        cout << *it << " ";

    return 0;
}

输出:     0     2     8     27     29     32     35     48     52     55     58     62     72