2011-04-13 137 views
5

我在讀取C++文件時遇到了一些麻煩。我只能讀取整數或只能讀取字母。但我不能同時閱讀例如10af,ff5a。我的程序如下:從C++的文件中讀取整數和字符的組合

int main(int argc, char *argv[]) { 

if (argc < 2) { 
    std::cerr << "You should provide a file name." << std::endl; 
    return -1; 
} 

std::ifstream input_file(argv[1]); 
if (!input_file) { 
    std::cerr << "I can't read " << argv[1] << "." << std::endl; 
    return -1; 
} 

std::string line; 
for (int line_no = 1; std::getline(input_file, line); ++line_no) { 
    //std::cout << line << std::endl; 

     ----------- 
    } 
     return 0; 
} 

所以我試圖做的是,我允許用戶指定他要讀取輸入文件,我使用函數getline獲取每一行。我可以使用標記方法來只讀取整數或僅字母。但我無法閱讀兩者的組合。如果我的輸入文件是

2 1 89ab

8 2 16ff

什麼是閱讀該文件的最好方法?

非常感謝您的幫助!

+0

不知道你的令牌的方法是什麼意思。你是否試圖標記每一行並失敗?那麼你爲什麼不在這裏包含那部分代碼呢? – Pirooz 2011-04-13 21:27:59

回答

0

使用

std::string s; 
while (input_file >> s) { 
    //add s to an array or process s 
    ... 
} 

您可以閱讀std::string類型的輸入可能是數字和字母的任意組合。您不一定需要逐行讀取輸入,然後嘗試解析它。 >>運算符將空格和換行符視爲分隔符。

+0

哦,好的。謝謝。我會試試看。我不知道我可以做到這一點。 – Sista 2011-04-13 21:38:45

2

我會使用std::stringstream,並使用std::hex,因爲89ab和16ff看起來像十六進制數字。

應該是這樣的:

std::string line; 
for (int line_no = 1; std::getline(input_file, line); ++line_no) 
{ 
    std::stringstream ss(line); 
    int a, b, c; 

    ss >> a; 
    ss >> b; 
    ss >> std::hex >> c; 
} 

您需要#include <sstream>

+0

雅你說得對。這對我有意義。它工作正常。我現在明白了該怎麼做。謝謝。 :) – Sista 2011-04-13 21:43:31

相關問題