2012-03-13 27 views
2

這在一些語言中非常容易,而在其他語言中則不那麼容易。我無法完全理解C++。我正在閱讀一個文件,其中有數千行問題標題的格式,並且一遍又一遍地讀取文件數千次。如何閱讀和分隔諸如「100_4_1 - 15」之類的分隔整數

基本上,我在我的程序中記住了一些整數,比如說「100, 4, 1」,我想在文本文件中查找序列中最後一位數字,因此該行可能是「100_4_1 - 15」,我想要得到15。如何才能做到這一點?

回答

1

記住一些整數在我的節目,說: 「100,4,1」, 「100_4_1 - 15」,我希望得到15

struct Key 
{ 
    int a_, b_, c_; 
    Key(int a, int b, int c) : a_(a), b_(b), c_(c) { } 
    bool operator<(const Key& rhs) const 
    { 
     return a_ < rhs.a_ || 
       a_ == rhs.a_ && b_ < rhs.b_ || 
       a_ == rhs.a_ && b_ == rhs.b_ && c_ < rhs.c_; 
    } 
}; 

typedef std::map<Key, int> Lookup_Table; 
Lookup lookup_table; 

if (std::ifstream if("filename.txt")) 
{ 
    int a, b, c; 
    char ignore_char; 
    int number; 
    while (if >> a >> ignore_char >> b >> ignore_char >> c >> ignore_char >> number) 
     lookup_table[Key(a, b, c)] = number; 
} 
else 
{ 
    std::cerr << "can't read input file...\n"; 
    exit(1); 
} 

// to find something: 
Lookup_Table::const_iterator i = lookup_table.find(Key(x, y, z)); 
if (i != lookup_table.end()) 
{ 
    // found... value accessible using *i... 
} 
1

這將取決於數字本身...這是10,000像文件,只是一個固定的文件?

如果是,例如,它有3個索引整數和一個需要查找的整數,將其全部加載到內存中並在需要時查找它會很簡單。

在C/C++結構的一個簡單的數組

會做得很好,例如:

#define NUMELEMENTS 1000 

struct Element { 
    int x; 
    int y; 
    int z; 
    int v; 
}; 

class Elements{ 
    elements Element[NUMELEMENTS]; 
    public: 
    int findElement(int,int,int); 
    void loadElements; 

} E; 

然後我會使用E.FindElement(100,4,1)和獲得15

loadElements將通過逐行讀取並分離數字來加載文件(我會讀取一個字符串,刪除空格,統一破折號和下劃線並獲取分隔符之間的數字。

findElement只會遍歷元素...對於10k元素,我不會擔心優化聯合國這在嵌入式設備上運行得更少。

+0

感謝,所以加載到主內存會更快。問題的主要部分是閱讀它雖然:) – Jim 2012-03-13 01:50:32