分词好像不起作用
你好,我用cmake GUI生成了vs 2017的工程,运行demo后发现控制台输出的分词结果是一个字一分的。
这个应该是只需要include几个jieba的hpp和deps目录下的几个头文件,再加上几个词典就可以运行了吧,不知道我的理解对不对。
字符编码不一样导致的问题。默认的字典是UTF-8编码的,但是VS2017 是GB2312编码的。
s = u8"他来到了网易杭研大厦"; cout << UTF8ToGB2312(s) << endl; cout << "[demo] Cut With HMM" << endl; jieba.Cut(s, words, true); cout << VectorToString(words) << endl;
需要修改的代码,字符串为默认UTF8,在输出的时候转为GB2312.

请问您分词不起作用的问题解决了吗,如何解决的,我用了转码为utf-8还是没有用。
字符编码不一样导致的问题。默认的字典是UTF-8编码的,但是VS2017 是GB2312编码的。
s = u8"他来到了网易杭研大厦"; cout << UTF8ToGB2312(s) << endl; cout << "[demo] Cut With HMM" << endl; jieba.Cut(s, words, true); cout << VectorToString(words) << endl;需要修改的代码,字符串为默认UTF8,在输出的时候转为GB2312.
//GB2312到UTF-8的转换 char* G2U(const char* gb2312) { int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0); wchar_t* wstr = new wchar_t[len + 1]; memset(wstr, 0, len + 1); MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len); len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL); char* str = new char[len + 1]; memset(str, 0, len + 1); WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL); if (wstr) delete[] wstr; return str; } //UTF-8到GB2312的转换 char* U2G(const char* utf8) { int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0); wchar_t* wstr = new wchar_t[len + 1]; memset(wstr, 0, len + 1); MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len); len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL); char* str = new char[len + 1]; memset(str, 0, len + 1); WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL); if (wstr) delete[] wstr; return str; }
s = "他来到了网易大厦"; cout << s << endl; s = G2U(s.c_str()); cout << "[demo] Cut With HMM" << endl; jieba.Cut(s, words, true); for (int i = 0;i < words.size();i++) { cout << U2G(words[i].c_str()) << "/"; } cout << endl;
请问一下如何用CMake生成VS项目,具体操作是怎么样的。我生成的项目在VS中尝试运行会报错(本人小白,跪求大神)
这两种方法在使用字符串后是否需要删除字符串指针,如不,是否会造成内存泄漏?