c ++打印字符串的内容

时间:2018-05-02 14:00:32

标签: c++ string

有人可以向我解释为什么我不能使用bar1.py在下面的代码中打印字符串hexaDeciNum而不是像c char数组那样遍历字符?我意识到这是一个基本的问题道歉。

cout << hexaDeciNum

3 个答案:

答案 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;
}

Live Example