好的,我的代码以一种非常好用的方式完成,并使用增量++和减量运算符。
unsigned int atob(const char* input)
{
int i = 0;
while (input[i] == '0' || input[i] == '1') i++;
unsigned result = 0;
unsigned currentBit = --i;
while ((*input == '0') || (*input == '1')) {
char isCurrentBitSet = *input == '1';
unsigned setValue = (isCurrentBitSet << currentBit--);
result |= setValue;
input++;
}
return result;
}
现在,我需要除掉while语句底部的输入++之外的所有dec( - )/ inc(++)。我对如何实施这个实施感到困惑。
答案 0 :(得分:4)
你走了:
unsigned int atob(const char* input)
{
unsigned result = 0;
while ((*input == '0') || (*input == '1')) {
result = (result << 1) | (*input++ - '0');
}
return result;
}
也节省了一些堆栈空间:)
答案 1 :(得分:2)
通常的方法是从结果集开始为0.然后对于每个输入字符,将结果在当前位中移位一位or
,然后重复直到输入结束无论如何,字符串(或0
或1
以外的其他内容。)
答案 2 :(得分:1)
决定彻底改变我的解决方案:
unsigned int atob(const char* input)
{
unsigned val;
for (val = 0; *input; input++) {
if (*input == '1') val = (val << 1) | 1;
else if (*input == '0' ) val <<= 1;
else break;
}
return val;
}
答案 3 :(得分:0)
用i = i + 1替换i ++?这似乎很容易。
答案 4 :(得分:-1)
考虑通过调用strtol
来替换整个函数