
由于我必须比较用户猜测的资本和文本,并且我不想让重点搞乱比较,我去挖掘互联网以实现某种方式.
我遇到了其他编程语言的无数解决方案,但只有几个关于C的结果.
他们都没有真正和我合作过.虽然,我得出结论,我必须使用wchar.h库来处理那些讨厌的字符
我做了这一小段代码(用E代替É)只是为了检查这个方法而且反对我阅读并理解它不起作用,即使打印宽字符串也不显示变音字符.如果它有效,我相信我可以在首都的计划中实现这一点,所以如果有人能告诉我什么是错的,我会很感激.
#include<stdio.h>#include<locale.h>#include<wchar.h>const wchar_t CAPITAL_ACCUTE_E = L'\u00C9';int main(){ wchar_t wbuff[128]; setlocale(LC_ALL,""); fputws(L"Say something: ",stdout); fgetws(wbuff,128,stdin); int n; int len = wcslen(wbuff); for(n=0;n<len;n++) if(wbuff[n] == CAPITAL_ACCUTE_E) wbuff[n] = L'E'; wprintf(L"%ls\n",wbuff); return 0;}@H_404_22@解决方法 您忽略的一个问题是É可以表示为 >É – LATIN CAPITAL LETTER E WITH ACUTE,代码点U 00C9(UTF-8中的c3 89),或
>É – LATIN CAPITAL LETTER E,紧接着是COMBINING ACUTE ACCENT,代号为U 0045 U 0301(45 cc 81 in UTF-8)
你需要考虑到这一点.这可以通过将两个字符串映射到NFD (Normal Form: Decomposed)来完成.之后,您可以去除已分解的组合字符并留下E,然后您可以像往常一样进行strcmp.
假设你有一个UTF-8编码输入,你可以用utf8proc来做到这一点:
#include <utf8proc.h>utf8_t *output;ssize_t len = utf8proc_map((uint8_t*)input,&output,UTF8PROC_NulLTERM | UTF8PROC_Stable | UTF8PROC_STRIPMARK | UTF8PROC_DECOMPOSE | UTF8PROC_CASEFolD );
这将把所有的É,É和E变成平常的e.
总结以上是内存溢出为你收集整理的C – 如何避免变音/重音敏感问题全部内容,希望文章能够帮你解决C – 如何避免变音/重音敏感问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)