c++ - 从 const char* 参数中取出一个索引

标签 c++ c string

我有以下代码:

int some_array[256] = { ... };

int do_stuff(const char* str)
{
   int index = *str;
   return some_array[index];
}

显然上面的代码在某些平台上会导致错误,因为 *str 实际上可能是负数。

于是想到了两种可能的解决方案:

  1. 在赋值时转换值(unsigned int index = (unsigned char)*str;)。

  2. 改为传递 const unsigned char*

编辑:这个问题的其余部分没有得到处理,所以我把它移到了一个新线程。

最佳答案

char 的符号性确实是平台相关的,但您所知道的是 char 的值与 unsigned char 的值一样多,转换是单射的。因此,您完全可以强制转换值以将查找索引与每个字符相关联:

unsigned char idx = *str;
return arr[idx];

您当然应该确保 arr 至少有 UCHAR_MAX + 1 元素。 (当 sizeof(unsigned long long int) == 1 时,这可能会导致搞笑的边缘情况,幸运的是这种情况很少见。)

关于c++ - 从 const char* 参数中取出一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41826072/

相关文章:

c++ - 计算重复项并将唯一条目放入数组 [c++] 中的新数组

c++ - tensorflow c++代码SessionFactory::GetFactory如何选择使用哪个 session ?Direct还是Grpc Session?

c - 将 scanf 值存储到二维字符串数组中

string - 如何检查golang模板中字符串的空值

C++ SFINAE 运算符/函数结果类型检查

c++ - 绑定(bind)可变参数函数 C++

c - 用户在数组中插入了多少个元素?

c - 使用套接字发送/接收/操作字符串

C# - 如何使用制表符正确缩进字符串数据?

c# - 如何使用c#将字符串与另一个字符串进行比较