【发布时间】:2017-05-12 06:03:32
【问题描述】:
我正在尝试编写一个程序,以土耳其语计算字符串中的所有字符。我不明白为什么这不起作用。我添加了库 setlocale(LC_ALL,"turkish") 但仍然无法正常工作。谢谢你。这是我的代码: 我的文件字符编码:utf_8
int main(){
setlocale(LC_ALL,"turkish");
char string[9000];
int c = 0, count[30] = {0};
int bahar = 0;
...
if ( string[c] >= 'a' && string[c] <= 'z' ){
count[string[c]-'a']++;
bahar++;
}
我的输出:
0.085217 b 0.015272 c 0.022602 d 0.035736 e 0.110263 f 0.029933 g 0.015272 h 0.053146 我 0.071167 k 0.010996 l 0.047954 米 0.025046 n 0.095907 Ø 0.069334 p 0.013745 q 0.002443 r 0.053451 0.073916 吨 0.095296 你 0.036958 v 0.004582 w 0.019243 x 0.001527 是 0.010996
这是英文字母,但我也需要计算这个字符:“ğ,ü,ç,ı,ö”
【问题讨论】:
-
您需要一个处理 UTF8/UTF16/UTF32 的 unicode 库。
-
...并检查您是否可以打开文件
-
那我该如何解决? @stargateur
-
你检查并打印了
setlocale()的返回值吗?"turkish"是有效的语言环境字符串吗? (我默认使用en_US.UTF-8:我希望您使用诸如tr_TR.UTF-8或tr-TR.ISO8859-9或类似的代码——这两个语言环境都存在于macOS Sierra,至少在我的机器上。)跨度> -
en_US.UTF-8字符串用于美国英语;en_GB.UTF-8英式英语;两者都使用 UTF-8 代码集。请注意,您使用if (string[c] >= 'a' && string[c] <= 'z')的测试仅检测基本 ASCII(小写)范围内的非重音字母。您需要使用<ctype.h>中的isalpha()来检测基本ASCII 范围之外的字母字符。然后,您必须将它们映射到适当的索引以正确计算它们。这是 Chrono Kitsune 对他们的回答所做的一些事情。与这样的角色打交道是一项艰巨的工作。了解代码集(您发现的是 UTF-8)至关重要。
标签: c count character-encoding