C 中的重音/元音字符?

2024-02-05

我刚刚学习 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;
}

我可以做什么来解决这个问题?


字符常量的编码实际上取决于您的区域设置。

最安全的选择是使用宽字符和相应的函数。您将字母表声明为const wchar_t* alphabet = L"abcdefghijklmnopqrstuvwxyzäöå",以及单个字符L'ö';

这个小示例程序对我有用(也在使用 UTF-8 的 UNIX 控制台上) - 尝试一下。

#include <stdlib.h>
#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main(int argc, char** argv)
{
    wint_t letter = L'\0';
    setlocale(LC_ALL, ""); /* Initialize locale, to get the correct conversion to/from wchars */
    while(1)
    {
        if(!letter)
            printf("Type a letter to get its position: ");

        letter = fgetwc(stdin);
        if(letter == WEOF) {
        putchar('\n');
        return 0;
        } else if(letter == L'\n' || letter == L'\r') { 
        letter = L'\0'; /* skip newlines - and print the instruction again*/
        } else {
        printf("%d\n", letter); /* print the character value, and don't print the instruction again */
        }
    }
    return 0;
}

会话示例:

Type a letter to get its position: a
97
Type a letter to get its position: A
65
Type a letter to get its position: Ö
214
Type a letter to get its position: ö
246
Type a letter to get its position: Å
197
Type a letter to get its position: <^D>

据我所知,在 Windows 上,这不适用于 Unicode BMP 之外的字符,但这在这里不是问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中的重音/元音字符? 的相关文章

随机推荐

  • writeHTMLCell() 之后的 TCPDF Write() 不会显示任何内容

    我使用后 pdf gt writeHTML 同一页面上不显示任何内容 如果我使用 pdf gt AddPage 然后用文字写成 pdf gt Write 再次显示 为什么 我应该怎么做才能在同一页上写字 html table table p
  • 在 Windows 窗体用户控件中嵌入 XNA 游戏

    我写了一个简单的 XNA 4 0 游戏 我想制作一个 Windows 窗体用户控件来渲染此游戏 并向 XNA 提供必要的交互反馈 键盘和鼠标 我已经尝试过以下方法 In XNA 将 XNA 的 Game GraphicsDevice 重定向
  • get_the_id 与 post->ID 与 the_id / get_post_meta

    我认为这一定是一个非常基本的问题 但我才刚刚开始 有人可以看一下下面相同 代码的 3 个版本并说出有什么区别吗 所有这些似乎在我正在处理的循环中都工作得很好 应该使用哪个 post gt ID the ID or get the id 是否
  • 如何从 Delphi 的主线程向 TThread 发送消息?

    我想向一个线程发送消息并在线程中处理它 我怎样才能在德尔福中做到这一点 我猜PostMessage是要走的路 但到目前为止我看到的例子描述的是另一种方式 即从线程到主线程 我什至不会尝试解释或编写任何代码 看看这个教程就知道了 它有点旧 但
  • 在启用 PyCharm 插件的情况下使用 CLion 逐步执行 C++ 代码

    启用 PyCharm 插件后 我在 CLion 中遇到问题 这就是我所做的 从 shell 运行 Python 程序 该程序创建多个进程 如工作进程 其中 Python 代码调用我想要调试的 C 代码 从 CLion 附加到原始主 Pyth
  • 在 MySQL 列中查找双引号

    我想查找带双引号的数据 我有下一个简单的查询 SELECT FROM table name WHERE column name LIKE 但我有语法错误 You have an error in your SQL syntax check
  • 在单个系统上运行客户端/服务器程序

    我想知道是否有两个程序 一个叫做server另一个叫client这两个分别说明了服务器和客户端 是否可以在一台机器上测试它们 考虑到我定义客户端套接字如下 socket new Socket 127 0 0 1 3000 编辑 服务器部分
  • 未找到“Aws\Common\Aws”类 cakephp

    我在 cakephp 中使用 AWS PHP SDK V2 8 我正在 AWS ec2 ubuntu 机器上工作 我使用 zip 文件而不是任何作曲家 我收到以下错误 Class Aws Common Aws not found 我创建了一
  • 在自己的函数中响应导航 onPress

    我已经实现了教程中的 React Navigation 示例https reactnavigation org docs intro https reactnavigation org docs intro 而且效果很好
  • 在 Spring boot 中禁用自动提交不起作用

    我设置了两个参数以通过 False 禁用自动提交 但在没有提交事务的情况下保存实体操作 spring datasource hikari auto commit false spring jpa properties hibernate c
  • 在我的文本区域中显示降价

    我正在使用 BlueCloth 从用户输入文本区域的内容中通过 markdown 创建 html 如下所示 def create post Post new params post do post body BlueCloth new po
  • 我的 Android 应用程序 ViewPager 中 PagerTabStrip 的自定义字体颜色

    我需要更改 Android 应用程序 ViewPager 中 PagerTabStrip 的字体颜色 这是相同的 xml 布局 我有什么办法可以做到这一点吗
  • 如何在Java中将文件/目录移动到回收站而不是永久删除它[重复]

    这个问题在这里已经有答案了 我正在尝试创建 GUI 示例 当用户单击按钮时删除文件和 或目录 但我看到文件被永久删除 如何使其移动到回收站而不是这个 if File path getText isEmpty JOptionPane show
  • NodeJS 文件系统观察抛出事件两次或更多次

    我正在 Ubuntu 上使用以下命令查看 NodeJS 服务器的配置文件 for var index in cfgFiles fs watch cfgFiles index function event fileName logger in
  • python argparse子命令具有依赖性和冲突

    我想使用 argparse 来构建一个带有子命令的工具 可能的语法可以是 tool py 下载 from 1234 interval 60 tool py 下载 build 1432 tool py clean 数字 10 所以我想使用ar
  • iOS AVExportSession 仅因修剪视频而失败

    我创建了一种根据给定时间范围修剪和导出视频的方法 它还会将视频旋转为横向 但由于某种原因 AVAssetExportSession 在尝试处理之前使用 UIVideoEditorController 修剪的视频时失败 以前有人遇到过这个问题
  • Errno::EACCES:运行捆绑包时权限被拒绝,它命中 json 1.8.1,pg 0.17

    我刚刚买了一台新笔记本电脑 并使用迁移助手完全转移了所有内容 似乎一切正常并且处于适当的位置 所以我不知道这是否是问题所在 我对调试这样的环境错误还很陌生 我一直在 Windows 上开发一个 Rails 项目 这台笔记本电脑是 Mac O
  • Python 字符串中的 u'\ufeff'

    我收到错误并显示以下异常消息 UnicodeEncodeError ascii codec can t encode character u ufeff in position 155 ordinal not in range 128 不知
  • JScrollPane 中的滚动更平滑

    使用 JScrollPane 的滚动条箭头进行滚动 或通过为箭头键设置键绑定 将视口移动一个增量 暂停 然后平滑滚动 我遇到的大多数滚动条的行为都是一样的 有轻微的移动 暂停 然后更快地连续滚动 有什么方法可以避免暂停 以便滚动从开始到结束
  • C 中的重音/元音字符?

    我刚刚学习 C 语言 并接到了一项作业 要求我们将纯文本翻译成莫尔斯电码 然后再翻译回来 我最熟悉 Java 所以请耐心等待我使用的术语 为此 我有一个包含所有字母字符串的数组 char letters etc 我编写了一个函数来返回所需字