整数打印为Alt代码

时间:2014-03-19 05:48:02

标签: c++

我实现了一个C ++链接列表并遇到了一些非常有趣的行为。

string LinkedList::toString() {
    string output = "";
    Node *cur = first;
    for (int i = 0; i < size; i++) {
        output += "node ";
        output += i;
        output += ": ";
        output += cur->toString();
        output += "\n";
        cur = cur->getNext();
    }
    return output;
}

以上代码全部正常运行,除了一个小例外......

enter image description here

我的for循环中的i正在打印为alt-code!为什么?

4 个答案:

答案 0 :(得分:1)

您已将数字(即i)放入字符串中,而不先将其转换为字符。结果是该字符串包含具有该数字代码的字符。考虑到最常见的字符集布局方式,代码小于32的字符通常是控制代码。

在将数字添加到现有字符串之前,您可能希望使用std::to_string将数字转换为字符串。或者,将数据格式化为stringstream,然后返回其内容,这是一般订单:

string LinkedList::toString() {
    std::ostringstream buffer;
    Node *cur = first;
    for (int i = 0; i < size; i++) {
        buffer << "node " << i << ": " << cur->toString() << "\n";
        cur = cur->getNext();
    }
    return buffer.str();
}

答案 1 :(得分:0)

因为它将i视为char&amp;取其ASCII值。

答案 2 :(得分:0)

您要将int追加到output string。这些显示为ASCII表示。

您可以使用std::ostringstream(未经测试)解决此问题:

std::string LinkedList::toString() {
    std::ostringstream output;
    Node *cur = first;
    for (int i = 0; i < size; i++) {
        output << "node ";
        output << i;
        output << ": ";
        output << cur->toString();
        output << "\n";
        cur = cur->getNext();
    }
    return output.str();
}

这可能更具可读性:

std::string LinkedList::toString() {
    std::ostringstream output;
    Node *cur = first;
    for (int i = 0; i < size; i++) {
        output << "node " << i << ": " cur->toString() << "\n";
        cur = cur->getNext();
    }
    return output.str();
}

答案 3 :(得分:0)

使用itoa将int更改为ascii。只是解决你的问题。 请尝试以下代码:

 string LinkedList::toString() {
string output = "";
char buff[100];
Node *cur = first;
for (int i = 0; i < size; i++)
{
    itoa(i,buff,10);
    output += "node ";
    output += buff;
    output += ": ";
    output += cur->toString();
    output += "\n";
    cur = cur->getNext();
}
return output;
}
相关问题