2013-03-28 57 views
0

快速問題:我試圖接受字符串參數,然後使用堆棧和向量將其向後打印。然而,屏幕上沒有任何內容顯示在屏幕上。我相信這與矢量設置有關,因爲我之前從未使用過這個工具。這是有問題的代碼。我將不勝感激任何幫助!在C++中使用堆棧和向量以相反順序打印字符串

void main() { 

stack<char> S; 
string line; 
vector<char> putThingsHere(line.begin(), line.end()); 
vector<char>::iterator it; 

cout << "Insert a string that you want to see backwards!" << endl; 
cin >> line; 

for(it = putThingsHere.begin(); it != putThingsHere.end(); it++){ 
    S.push(*it); 
} 

cout << "Here you go! " << endl; 

while(!S.empty()) { 
    cout << S.top(); 
    S.pop(); 
} 

system("pause"); 


} 
+0

'無效的主要()'是非標準。使用'int main()'。 – chris

回答

2

您的向量正在初始化得太早,line仍爲空。移動的putThingsHere建設下方從標準輸入提取串指令:

cin >> line; 
vector<char> putThingsHere(line.begin(), line.end()); 

這是你的正確運行固定程序的live example

請注意,使用getline()而不是cin >> line,這樣字符之間的空格仍然可以作爲單個字符串的一部分讀取。

這就是說,它是值得一提的std::string滿足標準序列容器的要求和,特別是,具有成員函數begin()end()返回一個std::string::iterator

因此,你不需要一個std::vector<>在所有與下面的代碼段將做的工作:

getline(cin, line); 
for(std::string::iterator it = line.begin(); it != line.end(); it++) { 
    S.push(*it); 
} 
+0

打敗我,但我會提及使用'getline'來讀取一個名爲'line'的變量。 – chris

+0

@chris:謝謝您提及,我編輯了答案 –

+0

太棒了!非常感謝。很高興知道我大部分都是對的,這只是我忽視的秩序。感謝現場編碼示例! – AHalbert

0

首先讀入line然後才putThingsTHere

stack<char> S; 
string line; 

cout << "Insert a string that you want to see backwards!" << endl; 
cin >> line; 
vector<char> putThingsHere(line.begin(), line.end()); 
vector<char>::iterator it; 
2

line變量是最初空。你從來沒有真正把vector PutThingsHere和stack S.

內的任何聲明vector<char> PutThingsHere(...)之前把

cout << "Insert a string that you want to see backwards!" << endl; 
cin >> line; 

0

我有你的使用std::string已經,爲什麼不使用:

`std::string reversed(line.rend(), line.rbegin());` 
+0

我從標題和代碼中得到了它是一個堆棧練習的想法。不過,我同意這一點,以及'std :: reverse'都是簡單的方法。實際上,如果只是輸出,你可以將'std :: reverse_copy'轉換爲'std :: ostream_iterator'。 – chris

+0

我曾想知道這是否是問題的一個限制,但有時很難說什麼時候什麼是鍛鍊或什麼時候是他們試圖完成的事情:-) –