我正在尝试编写一个程序来计算土耳其语字符串中的所有字符。我不明白为什么这不起作用。我添加了库 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
, 其中xx
是ISO 639-1语言代码,YY
是ISO 3166-1 Alpha-2 code为国家,CHARSET
是一个可选的字符集名称(通常是 ISO8859-1
、 ISO8859-15
或 UTF-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/