2013-12-22 49 views
0

我有一個名爲numbers.txt的文件,有幾行數字。我只是試圖將每個數字轉換爲整數並打印出來。將文件行的每個元素轉換爲整數

if (numbers.is_open()) { 
    while (std::getline(numbers, line)) { 
     for (int i = 0; i < line.length(); i++) { 
      number = atoi((line.at(i)).c_str()); 
      std::cout << number; 
     } 
    } 
    numbers.close(); 

有人可以解釋爲什麼這不適合我嗎?

+0

我建議使用'的std :: istringstream'。在「C++ istringstream getline」中搜索StackOverflow。 –

回答

0

您的初始代碼不應該編譯,因爲std::string::at(size_t pos)不會返回std::string;它返回一個原始字符類型。字符沒有方法—沒有char::c_str()方法!

如果以上您的評論是正確的,你要正確對待個人的字符爲數字,我建議如下:

if (numbers.is_open()) 
{ 
    while (std::getline(numbers, line)) 
    { 
     auto i = line.begin(), e = line.end(); // std::string::const_iterator 
     for (; i != e; ++i) 
     { 
      if (std::isdigit(*i)) 
      { 
       // Since we know *i, which is of type char, is in the range of 
       // characters '0' .. '9', and we know they are contiguous, we 
       // can subtract the low character in the range, '0', to get the 
       // offset between *i and '0', which is the same as calculating 
       // which digit *i represents. 
       number = static_cast<int>(*i - '0'); 
       std::cout << number; 
      } 
      else throw "not a digit"; 
     } // for 
    } // while 
    numbers.close(); 
} // if 
0

您的內在for循環遍歷行中的每個字符,這是不必要的,假設您想將整行視爲單個數字。 atoi()函數對整個c字符串進行操作,而不僅僅是一個字符。所以,你可以擺脫for環路和.at(i)的,只是做這樣的事情:

if (numbers.is_open()) { 
    while (std::getline(numbers, line)) {          
     int number = atoi(line.c_str()); 
     std::cout << number << std::endl;        
    } 
    numbers.close(); 
    } 
} 

EDIT(WRT評論#0)

要分別解釋每個字符,你可以這樣做(雖然有可能實現清潔劑):

if (numbers.is_open()) { 
    while (std::getline(numbers, line)) { 
     for (int i = 0; i < line.length(); i++) {              
     int number = atoi(line.substr(i, 1).c_str()); 
     std::cout << number << endl; 
     } 
    } 
    numbers.close(); 
    } 

如果你能保證會有文件中只有數字,你也可以進行這樣的轉換:

int number = line.at(i) - '0'; 
+0

我想將每個字符視爲單個數字。 – Tetramputechture

相關問題