C中的重音变音字符?

C中的重音变音字符?,第1张

概述我刚刚学习了C并得到了一个任务,我们必须将纯文本转换为莫尔斯代码并返回. (我大部分都熟悉 Java,所以请遵守我使用的条款). 为此,我有一个包含所有字母字符串的数组. char *letters[] = {".- ", "-... ", "-.-. ", "-.. ", ".", "..-." etc 我写了一个函数来返回所需字母的位置. int letter_nr(unsigned cha 我刚刚学习了C并得到了一个任务,我们必须将纯文本转换为莫尔斯代码并返回. (我大部分都熟悉 Java,所以请遵守我使用的条款).

为此,我有一个包含所有字母字符串的数组.

char *letters[] = {".- ","-... ","-.-. ","-.. ",".","..-." etc

我写了一个函数来返回所需字母的位置.

int letter_nr(unsigned char c){    return c-97;}

这是有效的,但是作业规范要求处理瑞典语的变形字母åäö.瑞典语字母与最后用这三个字母的英语相同.我尝试检查这些,如下:

int letter_nr(unsigned char c){    if (c == 'å')        return 26;    if (c == 'ä')        return 27;    if (c == 'ö')        return 28;    return c-97;}

不幸的是,当我尝试测试这个函数时,我得到了所有这三个函数的相同值:98.这是我的主要测试函数:

int main(){       unsigned char letter;    while(1)    {        printf("Type a letter to get its position: ");        scanf("%c",&letter);        printf("%d\n",letter_nr(letter));    }    return 0;}

我该怎么做才能解决这个问题?

解决方法 通常编码的东西非常复杂.另一方面,如果您只想要一个特定于您的编译器/平台的脏解决方案,而不是在您的代码中添加这样的东西:

printf("letter 0x%x is number %d\n",letter,letter_nr(letter));

它将为你的变音符号提供十六进制值.而不仅仅是在if语句中替换你的带有数字的字母.

编辑你说你总是得到98所以你的scanf从控制台得到98 + 97 = 195 = 0x3C.根据这个table,0x3C是UTF8序列的开始,用于普通的LATIN SMALL LETTER N WITH latin1块中的东西.您使用的是Mac OS X?

编辑这是我最后的电话.相当Hackery但它适用于我:)

#include <stdio.h>// scanf for for letter. Return position in Morse table. // Recognises UTF8 for swedish letters.int letter_nr(){  unsigned char letter;  // scan for the first time,scanf("%c",&letter);  if(0xC3 == letter)  {    // we scanf again since this is UTF8 and two byte encoded character will come    scanf("%c",&letter);    //LATIN SMALL LETTER A WITH RING ABOVE = å    if(0xA5 == letter)      return 26;    //LATIN SMALL LETTER A WITH DIAERESIS = ä    if(0xA4 == letter)      return 27;   // LATIN SMALL LETTER O WITH DIAERESIS = ö    if(0xB6 == letter)      return 28;    printf("UnkNown letter. 0x%x. ",letter);    return -1;  }   // is seems to be regular ASCII  return letter - 97; } // letter_nrint main(){       while(1)    {        printf("Type a letter to get its position: ");        int val = letter_nr();        if(-1 != val)          printf("Morse code is %d.\n",val);        else          printf("UnkNown Morse code.\n");        // strip remaining new line    unsigned char new_line;    scanf("%c",&new_line);             }    return 0;}
总结

以上是内存溢出为你收集整理的C中的重音/变音字符?全部内容,希望文章能够帮你解决C中的重音/变音字符?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1033846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存