从const char*参数中取出索引

Ela*_*iss 1 c c++ string

我有以下代码:

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

int do_stuff(const char* str)
{
   int index = *str;
   return some_array[index];
}
Run Code Online (Sandbox Code Playgroud)

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

所以我想到了两个可能的解决方案:

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

  2. 传递const unsigned char*代替.

编辑:这个问题的其余部分没有得到治疗,所以我把它移到一个新的线程.

Ker*_* SB 5

的符号性char的确是依赖于平台的,但你知道的是,有尽可能多的价值char,因为是unsigned char和转换是单射.因此,您绝对可以转换值以将查找索引与每个字符相关联:

unsigned char idx = *str;
return arr[idx];
Run Code Online (Sandbox Code Playgroud)

你当然应该确保arr至少有UCHAR_MAX + 1元素.(这可能会导致欢闹的边缘情况sizeof(unsigned long long int) == 1,幸运的是,很少见.)