C++ 运行文件以填充地图并在空白处拆分

C++ 运行文件以填充地图并在空白处拆分,c++,getline,C++,Getline,所以我有一个项目,我不希望任何人为我做硬件,但我现在正在学习3个数据结构中的第一个,这样我就可以开始我的项目,在那里我需要通过运行一些文件来填充一些映射,我的示例文件是简单地设置的,我需要提取一个长键作为映射中的字符串值,像这样: 0 A 1 B 2 C 我的配对显然是0,这是A的关键,A是本项目的字符串,问题是我的导师也说这是一种可能的格式: 0 W e b 1 1 W e b 2 2 W e b 3 其中0是WEB1的键。我知道我需要在空白处除法,但老实说,我甚至不知道从哪里开始

所以我有一个项目,我不希望任何人为我做硬件,但我现在正在学习3个数据结构中的第一个,这样我就可以开始我的项目,在那里我需要通过运行一些文件来填充一些映射,我的示例文件是简单地设置的,我需要提取一个长键作为映射中的字符串值,像这样:

0 A

1 B

2 C
我的配对显然是0,这是A的关键,A是本项目的字符串,问题是我的导师也说这是一种可能的格式:

0 W e b 1

1 W e b 2

2 W e b 3
其中0是WEB1的键。我知道我需要在空白处除法,但老实说,我甚至不知道从哪里开始,我尝试了几种方法,但在第二种情况下,我只能得到字符串的第一个字符

这就是我最终要讨论的,不要担心整个布尔返回,我知道打开文件和检查文件的整个过程应该在这个函数之外进行,但是我的教授希望所有这些都在这个函数中

bool read_index(map<long, string> &index_map, string file_name)
{
    //create a file stream for the file to be read
    ifstream index_file(file_name);

    //if file doesn't open then return false
    if(!index_file)
        return false;

    string line;
    long n;
    string token;
    //read file
    while(!index_file.eof())
    {
        getline(?)
        //not sure how to handle the return from getline
    }

    //file read?
    return !index_file.fail();
}

如果你是一个纯C爱好者,你可以使用Strutk函数进行线分裂,但是有一个很好的C++方法来分割文件数据:只要将CIN流重定向到你的文件,它就可以分割任何有效的分隔符-空白、标签、换行符,只需要为自己保留一个行计数器

std::ifstream in(file_name);
std::streambuf *cinbuf = std::cin.rdbuf(); //better save old buf, if needed later
std::cin.rdbuf(in.rdbuf()); //redirect std::cin to file_name

// <something>

std::string line;
while(std::getline(std::cin, line))  //now the input is from the file
{
    // do whatever you need with line here, 
    // just find a way to distinguish key from value
    // or some other logic
}
马上。使用whilestd::getlineindex_文件,并在循环体中丢失getline。始终检查IO操作是否成功;永远不要以为他们没有失败。