C++ 如何读入和分离分离的整数,例如;100“U 4”U 1-15“;

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个索引整数,一个需要查找的整数,那么只需将其全部加载到内存中,并在需要时查找它就很简单了

这在某些语言中非常容易,在其他语言中则不那么容易。我不能完全理解C++。我正在阅读一个文件,文件标题中有数千行的格式,并且一遍又一遍地阅读该文件数千次


基本上,我的程序中有一些整数,比如“
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...
}