我实现了一个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;
}
以上代码全部正常运行,除了一个小例外......
我的for循环中的i
正在打印为alt-code!为什么?
答案 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;
}