我正在开发一个能够将 unicode(Bengali) 字符串标记为单词的问题。它存储基于分隔符的字符串,例如 ',', '?' 等但问题是我的程序适用于除“।”(Devnagari danda)之外的所有其他孟加拉字符。我能做些什么来解决这个问题?代码如下:
#include <codecvt>
#include <locale>
#include <fcntl.h>
#include<uchar.h>
using namespace std;
bool isDari(wchar_t c)
{
//std::locale::global(std::locale(""));
wchar_t ch = L'\u0964';
if (c == ch)
return 1;
return 0;
}
bool isPunctuation(wchar_t c)
{
//std::locale::global(std::locale(""));
if(isDari(c))
return 1;
else if(c == L' ')
return 1;
else if (c == L'\r' || c == L'\n')
return 1;
else if (c == L',')
return 1;
else if (c == L'?')
return 1;
return 0;
}
void tokeniser(vector<wstring> s)
{
//std::locale::global(std::locale(""));
wstring str,temp=L"";
wfstream f1,f2;
/*f1.imbue(utf16_locale);
f2.imbue(utf16_locale);
_setmode(_fileno(stdout), _O_U16TEXT);*/
f1.open("read.txt");
f2.open("write.txt");
if(!f1 || !f2)
cout << "File not found!" << endl;
else
{
while(getline(f1,str))
{
//getline(f1,str);
int j=0;
for(int i=0;i<str.size();i++)
{
if(isPunctuation(str[i]))
{
if(temp.size()>0)
{
s.push_back(temp);
temp = L"";
}
}
else
{
temp.push_back(str[i]);
//cout << "Found delimeter\n";
}
}
s.push_back(temp);
}
for(int i=0;i<s.size();i++)
f2 << s[i] << endl;
}
}
int main()
{
std::vector<wstring> store;
tokeniser(store);
}
值得一提的是,我的代码在我使用 windows-gcc-x64、c++ 17 的 vscode 上显示了这个问题,但在 onlinegdb 上运行良好。