2012-02-10 48 views
0

我正在爲數據結構類的項目工作。我們的目標是用一棵樹來判斷隱喻性的小矮人是否可以用比喻性的鑽石來支付隱喻性的稅收。輸入以格式「3 1 2 3 3 1 2 3」的字符串形式給出,這意味着3個鑽石的價值1 2 3和3個稅費用爲1 2 3.定義字符串in-code與控制檯輸入之間的區別

我遇到的問題不是從樹的實現,但處理解析輸入的方式,我可以將它插入到樹中,特別是:當我直接在代碼中輸入值時,它會給出正確的輸出,但是當使用cin輸出run陷入一些問題。

用下面的代碼:

string str; 
str = "5 1 2 3 4 5 5 1 2 3 4 5"; 


str.erase(remove_if(str.begin(), str.end(), ::isspace), str.end()); 
char ch[str.size()]; 
strcpy(ch, str.c_str()); 

int numDiamonds = ch[0] - '0'; 
cout<<numDiamonds<<" diamonds"<<endl; 

int counter = 1; 

for(int i = 1; i < numDiamonds+1; ++i){ 
    int out = ch[i] - '0'; 
    cout<<out; 
    cout<<" "; 
    ++counter; 
} 

cout<<endl; 

int numTaxes = ch[numDiamonds+1] - '0'; 

cout<<numTaxes<<" taxes"<<endl; 
for(int i = counter+1; i < str.size(); ++i){ 
    int out = ch[i] - '0'; 
    cout<<out; 
    cout<<" "; 
} 
cout<<endl; 
} 

我的輸出顯示正確的,如下:

5 diamonds 
1 2 3 4 5 
5 taxes 
1 2 3 4 5 

,但是當我改變 「海峽= 5 1 ...」 到「CIN >> str「我的輸出顯得混亂,是以下。

5 diamonds 
-48 -48 -48 -48 -48 
-20 taxes 

1 diamonds 
-48 
-48 taxes 

2 diamonds 
-48 -48 
-48 taxes 

3 diamonds 
-48 -48 -48 
-48 taxes 

4 diamonds 
-48 -48 -48 -48 
-48 taxes 

5 diamonds 
-48 -48 -48 -48 -48 
-20 taxes 

5 diamonds 
-48 -48 -48 -48 -48 
-20 taxes 

1 diamonds 
-48 
-48 taxes 

2 diamonds 
-48 -48 
-48 taxes 

3 diamonds 
-48 -48 -48 
-48 taxes 

4 diamonds 
-48 -48 -48 -48 
-48 taxes 

5 diamonds 
-48 -48 -48 -48 -48 
-20 taxes 

谷歌搜索再多幫助解決了我的問題,所以我把你們。有沒有解釋爲什麼cin進入一個字符串有不同的行爲,而不是在代碼中定義字符串?

謝謝!

+1

嘗試打印輸入數據後的字符串。 – 2012-02-10 07:03:59

回答

3

這是因爲輸入在遇到空格時結束,即它只讀取第一個數字。改爲使用cin.getline()

確切的輸入行將是:getline(cin, str),因爲您使用std::string否則,cin.getline()也可以完成這項工作。

1

嘗試使用std :: getline(cin,str)。

-1

cin只是佔用下一個空格字符。

您可以使用cin.getline,但更好的選擇是,查看您使用的是什麼,爲每個整數循環cin

所以,你可以這樣做:

vector<int> input; 

int x; 
while (cin.good()) { 
    cin >> x; 
    input.push_back(x); 
} 

cin.good()只檢查如果流仍是......嗯,好。如果流存在問題(例如,如果您到達流的末尾),則返回0.如果您知道其格式,那麼從stdin檢索項是一種很好的方法,它通常是從stdin讀取的ICPC/topcoder問題。使事情變得更簡單,你不同意嗎? :)

+1

以這種方式讀取輸入流是一種不好的做法。 [請閱讀此]。(http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – Blastfurnace 2012-02-10 07:40:10

+1

該代碼甚至無法編譯。 'std :: cin >> x' – 2012-02-10 07:52:31

+0

如果您知道輸入的格式,那很好。另外,修復。 – Pochi 2012-02-11 09:32:20

相關問題