2014-03-19 77 views
0

我正在實現一個C++鏈接列表並運行到一些非常有趣的行爲。整數打印爲Alt代碼

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

i在我的for循環被印刷爲alt-code!爲什麼??

+0

它以它爲ASCII值的使用'itoa' –

回答

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(); 
} 
0

因爲它將i當作char &取其ASCII值。

+0

我怎樣才能避免這種情況? –

0

要附加int s到您的outputstring。這些被顯示爲他們的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(); 
} 
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; 
}