-1

我正在开发一个能够将 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 上运行良好。

4

0 回答 0