加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的重音/变音字符?

发布时间:2020-12-14 18:12:36 所属栏目:百科 来源:网络整理
导读:我刚刚学习了C并得到了一个任务,我们必须将纯文本转换为莫尔斯代码并返回. (我大部分都熟悉 Java,所以请遵守我使用的条款). 为此,我有一个包含所有字母字符串的数组. char *letters[] = {".- ","-... ","-.-. ","-.. ",".","..-." etc 我写了一个函数来返回
我刚刚学习了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("%dn",letter_nr(letter));
    }
    return 0;
}

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

解决方法

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

printf("letter 0x%x is number %dn",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_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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读