2013-05-30 38 views
0

我正在解析用戶的座標,我想將它們添加到一個矢量(不知道將有多少)。但是,插入了錯誤的值。如圖所示:考慮座標,但錯誤的值插入到矢量中?

string userInput; 
getline(cin,userInput); 

for(int i = 0; i < userInput.length(); i++) 
{ 
    if(isdigit(userInput[i])) 
    { 
     results.push_back(userInput[i]); 
     if(isdigit(userInput[i + 1])) //check the value next to it too (max of double digits) 
     { 
      results[i] = 10 * (userInput[i + 1]); //add it to the vale 
     } 
    } 
} 

如果我輸入(1,2) - (3,4),在「(」被跳過,但由於某些原因,當它看到的那個1是一個數字,它把49到向量以及其他隨機數字。任何幫助,將不勝感激,謝謝!

回答

1

​​是char類型。它不是隨機的,而是在ASCII編碼。「0」 ...「9」在ASCII十進制編碼。48-57所以,你可以使用userInput[i] - 48userInput[i] - '0'讓你的INT

另一個問題在你的代碼。在每次迭代中,你檢查它旁邊的值,但不執行t在下一次迭代中跳過它,這意味着如果輸入是1234,您將得到一個向量{12,23,34}

還有一個問題:您的代碼永遠不會捕獲3位數的數字。

最後(希望),你的results[i] = 10 * (userInput[i + 1])下降你的第一位數字。

順便說一下,爲什麼不使用stringstream解析您的輸入?以下函數將解析一個座標。

#include <sstream> 

std::pair<int,int> parse_coordinate (const string& input_string) { 
    std::pair<int,int> ret; 
    std::stringstream in(input_string); 
    if ((in.get() == '(') && (in >> ret.first) 
    && (in.get() == ',') && (in >> ret.second) 
    && (in.get() == ')')) { 
    return ret; 
    } 
    // deal with error 
    return std::make_pair(0,0); 
}