2013-03-08 108 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字符串的。