【问题标题】:Number to string Mapping Using C使用 C 的数字到字符串映射
【发布时间】:2015-10-30 10:33:58
【问题描述】:

我有一组数字及其对应的字符串

1 -> 关机

2 -> 休眠

3 -> 睡眠

4 -> 重启

5 -> 锁定

这个列表可以去更大的数字映射到字符串

我很想知道我们可以通过使用 C 程序来实现这一目标的任何方法,我想如果在面向对象的 C#、C++ 中映射可以很容易。我相信很难放#define

输入为整数,返回对应的字符串值。如果我们可以让它变得非常高效,那将是非常有帮助的,因为我们可能会遇到这个多重时代。

【问题讨论】:

  • 你可以只使用一个字符串数组并使用索引之类的数字吗?
  • 如果列表不变,可以考虑X-macros
  • 如果数字相邻,使用普通数组。如果数字可以是任何数字,请使用哈希表。
  • @user694733 对于几乎任何目的来说都是非常糟糕的主意......
  • @Lundin 这不是万能的解决方案,但对于简单快速的词典来说,它只是工具箱中的另一个工具。

标签: c string struct enums integer


【解决方案1】:

如果数字是连续的并且像您显示的那样接近 0,那么自然的解决方案(在许多编程语言中)是使用数组:

const char *strings[] = { "Shutdown", "Hibernet", "Sleep", "Restart", "Lock" };

printf("Look, the second string is %s\n", strings[1]);

这将打印Hibernet。唯一需要注意的是 C 数组索引是从 0 开始的。

如果数字“无处不在”,则需要不同的解决方案,可能是二叉树,或者只是可以在其中进行二分搜索的排序数组。像这样的数据类型不是内置在 C 中的,您必须使用库或自己实现它们。

【讨论】:

  • 看起来不错,但这取决于列表的顺序,如果我们需要一些与顺序不同的数字(比如一些 ID 42-“shutdown”)和 (102-"Hibernet ") 我不确定在 c 中是如何完成的
猜你喜欢
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 2021-11-15
  • 2012-08-21
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
相关资源
最近更新 更多