getNext(); } 返回输出; },c++,C++" /> getNext(); } 返回输出; },c++,C++" />

整数打印为Alt代码 我正在实现一个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; } string链接列表::toString(){ 字符串输出=”; 节点*cur=第一个; 对于(int i=0;itoString(); 输出+=“\n”; cur=cur->getNext(); } 返回输出; }

整数打印为Alt代码 我正在实现一个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; } string链接列表::toString(){ 字符串输出=”; 节点*cur=第一个; 对于(int i=0;itoString(); 输出+=“\n”; cur=cur->getNext(); } 返回输出; },c++,C++,除了一个小的异常,上面的代码都能正确运行 我的for循环中的i正在打印为!为什么?因为它将i视为字符并获取其ASCII值。您将一个数字(即i)放入字符串,而没有首先将其转换为字符。结果是字符串包含一个带有该数字代码的字符。考虑到大多数常见字符集的布局,代码小于32的字符通常是控制代码 在将数字添加到现有字符串之前,您可能希望使用std::to_string将数字转换为字符串。或者,将数据格式化为stringstream,然后按以下一般顺序返回其内容: string LinkedList::to

除了一个小的异常,上面的代码都能正确运行


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

因为它将
i
视为字符并获取其ASCII值。

您将一个数字(即
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();
}
string链接列表::toString(){
std::ostringstream缓冲区;
节点*cur=第一个;
对于(int i=0;ibuffer您正在将
int
s追加到
输出
字符串
。这些将以ASCII表示形式显示

您可以使用(未经测试)修复此问题:

std::string LinkedList::toString(){
std::ostringstream输出;
节点*cur=第一个;
对于(int i=0;i输出使用
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;
}
string链接列表::toString(){
字符串输出=”;
字符buff[100];
节点*cur=第一个;
对于(int i=0;itoString();
输出+=“\n”;
cur=cur->getNext();
}
返回输出;
}

将其作为ascii值使用
itoa
如何避免这种情况?
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();
}
 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;
}