我只是在学习 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 是 Latin1 block 中常见的 拉丁小写字母 N 的 UTF8 序列的开头,其中包含 内容。你在 Mac OS X 上吗?

编辑 这是我的最后一次通话。相当hacky,但它对我有用:)
#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_nr

int 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 中的重音/变音字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1725124/

10-13 04:06