当前位置:  开发笔记 > 编程语言 > 正文

如何删除C++ std :: string中的重音和波形符号

如何解决《如何删除C++std::string中的重音和波形符号》经验,为你挑选了2个好方法。

我在C++中有一个字符串的问题,它有几个西班牙语单词.这意味着我有很多带有重音符号和波浪号的单词.我想替换他们没有重音的同行.示例:我想替换这个词:哈比亚的"había".我尝试直接替换它,但使用字符串类的替换方法,但我无法让它工作.

我正在使用此代码:

for (it= dictionary.begin(); it != dictionary.end(); it++)
{
    strMine=(it->first);
    found=toReplace.find_first_of(strMine);
    while (found!=std::string::npos)
    {
        strAux=(it->second);
        toReplace.erase(found,strMine.length());
        toReplace.insert(found,strAux);
        found=toReplace.find_first_of(strMine,found+1);
    }
}

dictionary这样的地图在哪里(有更多条目):

dictionary.insert ( std::pair("á","a") );
dictionary.insert ( std::pair("é","e") );
dictionary.insert ( std::pair("í","i") );
dictionary.insert ( std::pair("ó","o") );
dictionary.insert ( std::pair("ú","u") );
dictionary.insert ( std::pair("ñ","n") );

toReplace字符串是:

std::string toReplace="á-é-í-ó-ú-ñ-á-é-í-ó-ú-ñ";

我显然必须遗漏一些东西.我无法弄清楚.有没有我可以使用的图书馆?

谢谢,



1> MSalters..:

我不同意目前"批准"的答案.在索引文本时,这个问题非常有意义.与不区分大小写的搜索一样,重音不敏感搜索是个好主意."天真的"匹配"天真"匹配"天真"匹配"天真"(你知道,一个大写的我是我的土耳其?这就是为什么你忽略重音)

现在,最好的算法暗示了批准的答案:使用NKD(分解)将重音字母分解为基本字母和单独的重音,然后删除所有重音.

不过,之后的重组很少有意义.您删除了大多数会改变的序列,而其他序列无论如何都是相同的.什么是NKC和æ在NKD之间的区别?


实际上,它没有.bär的Unicode分解给出ba"r(使用变音符号的额外代码点),而不是baer.记忆,Unicode分解与语言环境无关.ä= ae是德语,但不是例如荷兰语分解.

2> andrewdotn..:

首先,这是一个非常糟糕的主意:你通过删除字母来破坏某人的语言.尽管像"天真"这样的单词中的额外点对于只说英语的人来说似乎是多余的,但世界上有数以千计的书写系统,其中这些区别非常重要.编写软件以破坏某人的言论,使你在使用计算机作为扩大人类表达领域与压迫工具的手段之间的紧张关系的错误方面.

你试图这样做的原因是什么?是什么东西在口音上窒息?很多人都愿意帮助你解决这个问题.

也就是说,libicu可以为你做到这一点.打开变换演示 ; 将西班牙文本复制并粘贴到"输入"框中; 输入

NFD; [:M:] remove; NFC

作为"化合物1"并单击转换.

(在ICU的Unicode转换幻灯片9的帮助下.幻灯片29-30显示了如何使用API​​.)


对吧!口音和波浪曲并不可爱; 砍掉它们将改变文本的含义."Habia"不是一个词,而是"había"."Carácter"是"个性"; "caracter"是印刷符号."Cana"是一头白发; "Caña"是一根手杖."Peso"是一个名词."Pesó"是一个动词.
虽然这在理论上是正确的,但在实践中,许多西班牙语的人并不打算使用口音或只是让他们知道(IM浮现在脑海中)并且意思仍然清晰.就像它/它一样,它们是/他们用英语等.使用它们错误显示了一些疏忽,但很少引起误解.
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有