为什么这个字符串如此奇怪,对他没有记忆?

时间:2015-11-10 22:13:08

标签: c++ string

这个字符串发生了什么?它不应该一直都在工作吗?为了正常工作,我必须给他一个价值(例如result = "ManyLetters")。但是当我说清楚时,我就没有看到正确的价值。当我给字符串一个字母少于Hex包含的字符时,不会出现所有的十六进制。

string changeDectoHex(int Dec){

    string result = "";
    int modulo = 0;

    for (int i = 0; Dec != 0; i++){
        modulo = Dec % 16;
        Dec = (Dec - modulo)/16;

        if (modulo == 0) result[i] = '0';
        else if (modulo == 1) result[i] = '1';
        else if (modulo == 2) result[i] = '2';
        else if (modulo == 3) result[i] = '3';
        else if (modulo == 4) result[i] = '4';
        else if (modulo == 5) result[i] = '5';
        else if (modulo == 6) result[i] = '6';
        else if (modulo == 7) result[i] = '7';
        else if (modulo == 8) result[i] = '8';
        else if (modulo == 9) result[i] = '9';
        else if (modulo == 10) result[i] = 'A';
        else if (modulo == 11) result[i] = 'B';
        else if (modulo == 12) result[i] = 'C';
        else if (modulo == 13) result[i] = 'D';
        else if (modulo == 14) result[i] = 'E';
        else if (modulo == 15) result[i] = 'F';
    }

    reverse(result.begin(), result.end());

    return result;
}

2 个答案:

答案 0 :(得分:2)

您无法访问超出范围的元素(您的字符串长度为零),只需使用:

result += '1';

等。 您可以使用另一个字符串,以避免级联if / else:

 result += "0123456789ABCDEF"[modulo];

答案 1 :(得分:0)

使用push_back而不是尝试分配给result[i]。如果你想加快速度,你可以reserve达到预期的预期金额。