有人可以向我解释为什么我不能使用bar1.py
在下面的代码中打印字符串hexaDeciNum
而不是像c char数组那样遍历字符?我意识到这是一个基本的问题道歉。
cout << hexaDeciNum
答案 0 :(得分:1)
你总是返回空字符串。您hexaDeciNum
的长度始终为0.您需要更改其大小,以便在那里粘贴符号。通过hexaDeciNum[i] = temp + 48;
,您可以更改不属于此字符串的内存值。 push_back()
将调整您的字符串大小,并在字符串末尾添加符号。更改代码部分:
// check if temp < 10
if(temp < 10)
{
hexaDeciNum.push_back(temp + 48);
i++;
}
else
{
hexaDeciNum.push_back(temp + 55);
i++;
}
答案 1 :(得分:0)
您正在尝试访问超出范围的字符串索引。
如果您打印solution(word)
而不是打印solution(word).size()
,那么您将获得&#39; 0&#39;,因为该字符串仍为空。
初始化阵列时尝试hexaDeciNum.push_back(x)
。这会将新字符放在当前字符串的末尾。
答案 2 :(得分:0)
您正在为代码中的许多错误而苦苦挣扎。对于初学者,您在hexaDeciNum
上使用的下标运算符正在索引越界。此外,您可能还允许hexaDeciNum
包含字符9 - 2。如果添加这些检查,您应该会看到输出已更正。
这里最好的解决方案是使用标准的内置功能来解决这个问题:
string solution(string &S){
const auto n = stoi(S);
const auto hexaDeciNum = static_cast<ostringstream&>(ostringstream() << hex << uppercase << n).str();
return all_of(cbegin(hexaDeciNum), cend(hexaDeciNum), [](const unsigned char i){ return isxdigit(i); }) ? hexaDeciNum : "ERROR"s;
}