C++ 如何读入和分离分离的整数,例如;100“U 4”U 1-15“;
这在某些语言中非常容易,在其他语言中则不那么容易。我不能完全理解C++。我正在阅读一个文件,文件标题中有数千行的格式,并且一遍又一遍地阅读该文件数千次C++ 如何读入和分离分离的整数,例如;100“U 4”U 1-15“;,c++,parsing,file-io,C++,Parsing,File Io,这在某些语言中非常容易,在其他语言中则不那么容易。我不能完全理解C++。我正在阅读一个文件,文件标题中有数千行的格式,并且一遍又一遍地阅读该文件数千次 基本上,我的程序中有一些整数,比如“100,4,1”,我想在文本文件中查找序列中的最后一个数字,所以行可能是“100\u 4\u 1-15”,我想得到15。如何做到这一点?这将取决于数字本身。。。这是10000个文件,只是一个固定文件吗 如果它是,例如,它有3个索引整数,一个需要查找的整数,那么只需将其全部加载到内存中,并在需要时查找它就很简单了
基本上,我的程序中有一些整数,比如“
100,4,1
”,我想在文本文件中查找序列中的最后一个数字,所以行可能是“100\u 4\u 1-15
”,我想得到15
。如何做到这一点?这将取决于数字本身。。。这是10000个文件,只是一个固定文件吗
如果它是,例如,它有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元素,我不必担心优化,除非它在嵌入式设备上运行
在我的程序中,有些整数是“100,4,1”,
“100_4_1-15”,我想得到15
struct键
{
int a_uu,b_u,c_u;
键(inta,intb,intc):a_u(a),b_u(b),c_u(c){
布尔运算符>a>>忽略字符>>b>>忽略字符>>c>>忽略字符>>数字)
查找表[键(a、b、c)]=编号;
}
其他的
{
谢谢,所以将它加载到主内存会更快。问题的主要部分是读入:)
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...
}