2013-03-08 115 views
1

我想完成主題任務,但我的代碼不分裂。這裏的主要功能是:C++分裂使用wstring unicode分隔字符串

#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.utf8everywhere.org/,http://www.joelonsoftware.com/articles/Unicode.html, – 2013-03-08 15:07:59

回答

0

與寬字符串處理時,不能使用普通的字符串和字符。他們也必須是寬字符,如

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

注意的L在文字的前面,這使得該字符串寬字符的字符串。

同樣用於字符文字:

s.splitwc(L'ý') 
+0

好的,但我正常的字符串轉換爲wstring像這樣: wchar_t * s1 =(wchar_t *)「Myýnameýiszezehan」; 這不會工作? – 2013-03-08 14:37:09

+0

@MuhammadZeeshanArif不,它只會在鑄造時無法使用。寬字符的寬度非常寬,佔用了正常窄字符使用的多個字節。如果將普通字符串轉換爲寬字符字符串,則該函數將表現爲該字符串的兩個或更多字符是單個寬字符。 – 2013-03-08 14:44:55

+0

無論如何,我試過s.splitwc(L'ý'),但它說錯誤:轉換爲執行字符集:無效的參數 – 2013-03-08 14:49:56

1

使用的strtok的不是我自己分割功能,基於Unicode分隔符拆分字符串。

的代碼如下:

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

請注意,STR包括由UNICODE分隔符分隔的ANSI字符串的。