C++ C++;使用wstring拆分unicode分隔字符串

C++ C++;使用wstring拆分unicode分隔字符串,c++,unicode,wchar-t,wstring,C++,Unicode,Wchar T,Wstring,我试图完成主题任务,但我的代码没有拆分。以下是主要功能: #define SQL_TEXT Latin_Text #include <iostream> #define SQL_TEXT Latin_Text #include <sqltypes_td.h> #include "Split.h" #include <string> #include <stdio.h> #include <vector> #include <cst

我试图完成主题任务,但我的代码没有拆分。以下是主要功能:

#define SQL_TEXT Latin_Text
#include <iostream>
#define SQL_TEXT Latin_Text
#include <sqltypes_td.h>
#include "Split.h"
#include <string>
#include <stdio.h>
#include <vector>
#include <cstring>

using namespace std;
int main ()
{
    VARCHAR_LATIN *result = new VARCHAR_LATIN[512];
    wchar_t *s1 = (wchar_t *)"Myýnameýisýzeeshan";
    **splitstringwc s(s1);
vector<wstring> flds = s.splitwc((wchar_t)'ý');**
    wstring rs = flds[1];
    wcout<<rs<<endl;
for (int k = 0; k < flds.size(); k++)
        cout << k << " => " << flds[k].data() << endl;

    cout<<result;
    return 0;
}
#定义SQL_文本拉丁_文本
#包括
#定义SQL\u文本拉丁\u文本
#包括
#包括“Split.h”
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
VARCHAR_拉丁*结果=新的VARCHAR_拉丁[512];
wchar_t*s1=(wchar_t*)“我的名字是ýzeeshan”;
**分裂(s1);
向量flds=s.splitwc((wchar_t)‘ý’)**
wstring rs=flds[1];

wcout处理宽字符串时不能使用普通字符串和字符文本。它们也必须是宽字符,如

const wchar_t *s1 = L"Myýnameýisýzeeshan";
注意文本前面的
L
,这使字符串成为宽字符串

这同样适用于字符文字:

s.splitwc(L'ý')

处理宽字符串时不能使用普通字符串和字符文字。它们也必须是宽字符,如

const wchar_t *s1 = L"Myýnameýisýzeeshan";
注意文本前面的
L
,这使字符串成为宽字符串

这同样适用于字符文字:

s.splitwc(L'ý')

使用strtok而不是我自己的split函数,是基于unicode分隔符拆分字符串

代码如下:

public:
splitstringwc(wchar_t *s) : wstring(s) { };
vector<wstring>& splitwc(wchar_t delim, int rep=0);
};


vector<wstring>& splitstringwc::splitwc(wchar_t delim, int rep) {
if (!flds1.empty()) flds1.clear();  // empty vector if necessary
wstring ws = data();
wcout<<ws<<endl;
//wcout<<delim<<endl;

//wstring ws;
//int j = StringToWString(ws, work);
wstring buf = (wchar_t *)"";
int i = 0;
while (i < ws.size()) {
    if (ws.at(i) != delim)
        buf += ws.at(i);
    else if (rep == 1) {
        flds1.push_back(buf);
        buf = (wchar_t *)"";
    } else if (buf.size() > 0) {
        flds1.push_back(buf);
        buf = (wchar_t *)"";
    }
    i++;
}
if (!buf.empty())
    flds1.push_back(buf);
return flds1;
str = "Myýnameýisýzeeshan";
char *pch;
pch = strtok(str, "ý");
while (pch != NULL)
{
    printf("%s\n", pch);
    pch = strtok(NULL, "ý");
}

请注意,str由UNICODE分隔符分隔的ANSI字符串组成。

使用strtok而不是我自己的split函数,根据UNICODE分隔符分割字符串

代码如下:

public:
splitstringwc(wchar_t *s) : wstring(s) { };
vector<wstring>& splitwc(wchar_t delim, int rep=0);
};


vector<wstring>& splitstringwc::splitwc(wchar_t delim, int rep) {
if (!flds1.empty()) flds1.clear();  // empty vector if necessary
wstring ws = data();
wcout<<ws<<endl;
//wcout<<delim<<endl;

//wstring ws;
//int j = StringToWString(ws, work);
wstring buf = (wchar_t *)"";
int i = 0;
while (i < ws.size()) {
    if (ws.at(i) != delim)
        buf += ws.at(i);
    else if (rep == 1) {
        flds1.push_back(buf);
        buf = (wchar_t *)"";
    } else if (buf.size() > 0) {
        flds1.push_back(buf);
        buf = (wchar_t *)"";
    }
    i++;
}
if (!buf.empty())
    flds1.push_back(buf);
return flds1;
str = "Myýnameýisýzeeshan";
char *pch;
pch = strtok(str, "ý");
while (pch != NULL)
{
    printf("%s\n", pch);
    pch = strtok(NULL, "ý");
}

请注意,str由UNICODE分隔符分隔的ANSI字符串组成。

ok,但我将普通字符串转换为wstring,如下所示:wchar_t*s1=(wchar_t*)“我的名字是ýzeeshan”;这不起作用?@MuhammadZeeshanArif不,这不适用于仅强制转换。宽字符是,嗯,宽的,并且占用普通窄字符使用的一个字节以上。如果将普通字符串强制转换为宽字符串,函数将表现为该字符串中的两个或多个字符是单个宽字符。无论如何,我尝试了s.splitwc(L‘ý’)但它表示错误:转换为执行字符集:无效argument@JP你的答案是不一致的,在标准C++分发中没有内置的支持来处理Unicode,因为它必须使用像ICU这样的第三部分库…这就是为什么我得到无效的参数错误……D在普通C++中,但是如果你要使用宽字符变量,那么你必须使用宽字符文字。好的,但是我把普通字符串转换成Wstring,像这样:WCHARGET**S1=(WCHARYT**)“我的名字是ZeShan.”;这不起作用?@MuhammadZeeshanArif不,这不适用于仅强制转换。宽字符是,嗯,宽的,并且占用普通窄字符使用的一个字节以上。如果将普通字符串强制转换为宽字符串,函数将表现为该字符串中的两个或多个字符是单个宽字符。无论如何,我尝试了s.splitwc(L‘ý’)但它表示错误:转换为执行字符集:无效argument@JP你的答案是不一致的,在标准C++分发中没有内置的支持来处理Unicode,因为它必须使用像ICU这样的第三部分库…这就是为什么我得到无效的参数错误……D在普通C++中,但是如果你要使用宽字符变量,那么你必须使用宽字符文字。