如何读入和分隔分隔整数,例如"100_4_1 - 15"



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

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

这将取决于数字本身。。。这是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元素,我不会担心优化,除非它在嵌入式设备上运行。

相关内容

最新更新