C ++ расщепление строки, разделенной юникодом, с использованием 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 <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;
}

код для класса splitstringwc выглядит следующим образом:

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;

}

код не разбивает входную строку, когда я пытаюсь отладить, я получаю ошибку сегментации в: wstring ws = data ();

пожалуйста помоги……………

1

Решение

Использование strtok вместо моей собственной функции split — это разделение строки на основе разделителя Юникод.

код выглядит следующим образом:

str = "Myýnameýisýzeeshan";
char *pch;
pch = strtok(str, "ý");
while (pch != NULL)
{
printf("%s\n", pch);
pch = strtok(NULL, "ý");
}

Обратите внимание, что str состоит из строк ANSI, разделенных разделителем UNICODE.

1

Другие решения

Вы не можете использовать обычные строковые и символьные литералы при работе с широкими символьными строками. Они тоже должны быть широкими, как

const wchar_t *s1 = L"Myýnameýisýzeeshan";

Обратите внимание на L перед литералом это делает строку строкой широких символов.

То же самое используется для литералов символов:

s.splitwc(L'ý')
0

По вопросам рекламы [email protected]