2013-03-08 6 views
1

제목 작업을 수행하려고하지만 내 코드가 나뉘 지 않습니다.wstring을 사용하여 C++ 분리 유니 코드 구분 문자열

#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(); 넓은 문자열을 처리 할 때

도와주세요 ...............

+0

관련 : http://www.joelonsoftware.com/articles/Unicode.html, –

답변

0

당신은 일반 문자열과 문자 리터럴을 사용할 수 없습니다. 그들은 너무

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

공지 사항 리터럴 앞에 L처럼 와이드 문자 수 있고,이 문자열 와이드 문자열 수 있습니다.

같은이 문자 리터럴에 사용됩니다 :

s.splitwc(L'ý') 
+0

좋아,하지만 난 wstring이 정상적인 문자열을 캐스팅 오전 : wchar_t * s1 = (wchar_t *) "Myýnameýisìzeeshan"; 작동하지 않습니까? –

+0

@MuhammadZeeshanArif 아니 그냥 캐스팅과 함께 작동하지 않습니다. 와이드 문자는 넓고 넓으며 일반적인 좁은 문자가 사용하는 단일 바이트 이상을 차지합니다. 일반 문자열을 와이드 문자 문자열로 변환하면 해당 문자열의 두 개 이상의 문자가 단일 와이드 문자로 동작하므로 함수가 작동합니다. –

+0

어쨌든 s.splitwc (L' ý ')를 시도했지만 오류가 발생했습니다 : 실행 문자 집합으로 변환 : 잘못된 인수 –

1

대신 내 자신의 분할 기능의 strtok를 사용, 유니 코드 구분에 따라 문자열을 분할한다. 다음과 같이

코드는 다음과 같습니다

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

는 STR은 유니 코드 구분 기호로 구분 ANSI 문자열로 구성되어 있습니다.