這在一些語言中非常容易,而在其他語言中則不那麼容易。我無法完全理解C++。我正在閱讀一個文件,其中有數千行問題標題的格式,並且一遍又一遍地讀取文件數千次。如何閱讀和分隔諸如「100_4_1 - 15」之類的分隔整數
基本上,我在我的程序中記住了一些整數,比如說「100, 4, 1
」,我想在文本文件中查找序列中最後一位數字,因此該行可能是「100_4_1 - 15
」,我想要得到15
。如何才能做到這一點?
這在一些語言中非常容易,而在其他語言中則不那麼容易。我無法完全理解C++。我正在閱讀一個文件,其中有數千行問題標題的格式,並且一遍又一遍地讀取文件數千次。如何閱讀和分隔諸如「100_4_1 - 15」之類的分隔整數
基本上,我在我的程序中記住了一些整數,比如說「100, 4, 1
」,我想在文本文件中查找序列中最後一位數字,因此該行可能是「100_4_1 - 15
」,我想要得到15
。如何才能做到這一點?
記住一些整數在我的節目,說: 「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...
}
這將取決於數字本身...這是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元素,我不會擔心優化聯合國這在嵌入式設備上運行得更少。
感謝,所以加載到主內存會更快。問題的主要部分是閱讀它雖然:) – Jim 2012-03-13 01:50:32