C ++ ifstream,使用";"

时间:2015-11-19 18:35:47

标签: c++ ifstream

int a, b;
while (infile >> a >> b)
{
    // process pair (a,b)
}

所以这是我一直在看的代码,但我遇到了一个问题因为我的字符串之间没有空格,他们有&#34 ;;"
我的代码:

void load(string filename){ // [LOAD]
    string line;
    ifstream myfile(filename);
    string thename;
    string thenumber;

    if (myfile.is_open())
    {
        while (myfile >> thename >> thenumber)
        {
        cout << thename << thenumber << endl;

        //map_name.insert(make_pair(thename,thenumber));

        }
        myfile.close();
    }
   else cout << "Unable to open file";
}
[Inside the txt.file]

123;peter
789;oskar
456;jon

我现在得到的是&#34; thename&#34;作为123; peter和&#34; thenumber&#34;作为789;奥斯卡。 我想&#34;然后&#34;作为彼得和&#34;那么&#34;为123所以我可以将它正确地插回我的地图,怎么样?

3 个答案:

答案 0 :(得分:1)

infile&gt;&gt;从infile读取符合条件的类型。在你的情况下,a是int,所以&#39;&gt;&gt;&#39;期待找到一个int。在您的代码myfile&gt;&gt;那么&gt;&gt;数字都是字符串类型,所以他们期望文件中的字符串类型。问题是字符串包括&#39 ;;&#39;所以变量名将占用所有行,直到找到\ n(新行)。

代码

std::string thename, thenumber; char delimeter(';'); //It is always '-' is it? std::getline(std::cin, thename, delimeter); std::getline(std::cin, thenumber);

也是字符串类型。要将你的数量转换为int:

std::istringstream ss(thenumber);
int i;
ss >> i;
if (ss.fail())
{
    // Error
}
else
{
    std::cout << "The integer value is: " << i;
}
return 0;

答案 1 :(得分:0)

您必须输入单个字符串,然后将其拆分以获取名称和编号

....

#include <string>
#include <sstream>
#include <vector>

std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}


std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}

....

void load(string filename){ 

..........


    if (myfile.is_open())
    {
        while (myfile >>whole)
        {
             std::vector<std::string> parts = split(whole, ';');
             name = parts[0];
             number = parts[1];
        }
    }

答案 2 :(得分:0)

以格式读取文件非常简单。您可以使用std::getline使用不同的分隔符来告诉它停止读取输入的位置。

while(getline(myfile, thenumber, ';')) // reads until ';' or end of file
{
    getline(myfile, thename); // reads until newline or end of file
    map_name.insert(make_pair(thename,thenumber));
}