我在Linux Mint 15中使用gcc,并且我的终端可以理解unicode。我将处理UTF-8。我正在尝试获取更复杂的unicode字符串的基本单词。有点像将“ alternative”一词修剪为“ alternat”,但使用的是另一种语言。因此,我将需要测试每个单词的结尾。
在c和ASCII中,我可以做这样的事情
if(string[last_char]=='e')
last_char-=1; //Throws away the last character
我可以对unicode做类似的事情吗?就是这样的:
if(string[last_char]=='ഒ')
last_char=-1
最佳答案
编辑:
很抱歉,@ chux说我刚刚通知您正在用C进行询问。无论如何,同样的原则仍然适用。
在C语言中,您可以使用wscanf
和wprintf
对宽字符字符串进行I / O。如果您的角色在BMP中,则可以。只需将char *
替换为wchar_t *
并照常执行所有操作即可。
为了进行认真的开发,我建议将所有字符串转换为char32_t
进行处理。或使用ICU
之类的库。
如果只需要删除字符串中的某些给定字符,则可能不需要复杂的Unicode字符处理。将您的Unicode字符视为原始的char *
字符串,并对其执行任何字符串操作。
下面转载了面向C ++的旧答案,以供参考。
简单的方法
使用std::wstring
它基本上是一个std::string
,但各个字符都键入wchar_t
。
对于IO,您应该使用std::wcin
和std::wcout
。例如:
std::wstring str;
std::wcin >> str;
std::wcout << str << std::endl;
但是,在某些平台中,
wchar_t
是2字节宽,这意味着BMP之外的字符将不起作用。我认为这对您来说应该可以,但不应在认真的开发中使用。有关此主题的更多文本,请阅读this。艰难的道路
使用更好的Unicode感知字符串处理库,例如ICU。
C ++ 11方式
使用一些机制将输入字符串转换为
std::u32string
即可完成。转换例程可以手工制作,也可以使用现有的库(例如ICU)。由于
std::u32string
是使用char32_t
形成的,因此可以放心地假设您正在正确处理Unicode。