计算 C 中的土耳其字符

标签 c count character-encoding

我正在尝试编写一个程序来计算土耳其语字符串中的所有字符。我不明白为什么这不起作用。我添加了库 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 克 0.015272 h 0.053146 我 0.071167 k 0.010996 l 0.047954 米 0.025046 n 0.095907 o 0.069334 p 0.013745 q 0.002443 r 0.053451 小号 0.073916 t 0.095296 你 0.036958 v 0.004582 w 0.019243 x 0.001527 y 0.010996

这是英文字母表,但我也需要计算这些字符:“ğ,ü,ç,ı,ö”

最佳答案

setlocale(LC_ALL,"turkish");

第一个:"turkish"不是语言环境。

区域设置的专有名称通常类似于 xx_YY.CHARSET , 其中xxISO 639-1语言代码,YYISO 3166-1 Alpha-2 code为国家,CHARSET是一个可选的字符集名称(通常是 ISO8859-1ISO8859-15UTF-8 )。请注意,并非所有组合都有效;计算机必须为语言代码、国家/地区代码和字符集的特定组合生成区域设置文件。

你可能想要的是 setlocale(LC_ALL, "tr_TR.UTF-8") .


if ( string[c] >= 'a' && string[c] <= 'z' ){

第二:比较运算符,如>=<=不区分语言环境。此比较将始终按字节执行,并且不会包括 ASCII a 之外的字符- z范围。

要执行区域敏感比较,您必须使用类似 strcoll() 的函数.但是,另外请注意,某些字母(包括您要在此处包含的字母!)由 UTF-8 中的多字节序列组成,因此循环字节也不起作用。您将需要使用类似 mblen() 的函数或 mbtowc()分离这些序列。

关于计算 C 中的土耳其字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41353844/

相关文章:

php - sql中while循环获取不到count值?

php - 带有 PDO 的混合 UTF-8 和 latin1 表

c - 具有作用域和全局变量的 Malloc

c - 在 C 中,我在跟踪代码时遇到问题,并且不确定如何计算该值?

r - 如何使用group_by()和summary()来统计数据点的出现次数?

php - 准备好的报表返回获取结果和计数

javascript - 为特定的 div 设置字符集

php - Zend_Validate_StringLength 编码?

c - 链接到 Pelles C 中的 DLL

C语言,运行失败,十进制转二进制