繁体   English   中英

如何从文本文件中分离字符串

[英]How do separate a string from a text file

我有一个文本文件,其信​​息格式如下:

id最后一个字符串

例如:

0雪,约翰一无所有

1诺里斯,查克一切

如何获得分别存储的姓氏和名字?

为了从文件中获取信息,我做到了:

#include <fstream>

int id;
string str;
string last;
string first;

int main()
{
    ifstream myfile(ex.txt);

    myfile >> id;

    while (myfile)
    {
        for (int i = 0; i < 4; i++) // this is the amount of times i'll get information from 1 line

        {
            id = id; // its actually some_structure.id = id, omit

            getline(myfile, last, ','); // i think i need to use another function as getline get the whole line

            cout << id;

            cout << last; // print out the whole line!

        }

    }

}
ifstream myfile;
string line;
while (getline(myfile, line))
{
    istringstream ss(line);
    int id;
    ss >> id;
    string fullname;
    ss >> fullname;
    string firstname, lastname;
    {
        istringstream ss2(fullname);
        getline(ss2, lastname, ',');
        getline(ss2, firstname);
    }
}
if (std::ifstream input(filename))
{
    int id;
    string lastname, firstname, other_string;
    while (input >> id && getline(input, lastname, ',') &&
           input >> firstname >> other_string)
        ... do whatever you like...
    if (!input.eof())
        std::cerr << "error while parsing input\n";
}
else
    std::cerr << "error while opening " << filename << '\n';

上面的代码比我已经看到的其他答案有更多的错误检查,但是请注意-因为它一次不会读取一行文本然后解析出这些字段,所以它很乐意接受例如:

10 Chuck,
Norris whatever

会推荐这样的东西:

string name;
myfile >> id >> name >> str;
first = name.substr(0, name.find(","));
last = name.substr(name.find(",") + 1);

请注意,您的EOF检查不正确。

//完成工作的完整代码//请取消注释所有代码

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main () {
    string line;
    ifstream myfile ("ex.txt");
    if (myfile.is_open())
    {
        while ( getline (myfile,line) )
        {
            cout << line << '\n';
            string last  = line.substr(line.find(" ") + 1, line.find(",") - 2);
            string first = line.substr(line.find(",") + 1, line.find(",") + line.find(" ") - 1); 
        }
        myfile.close();
    }    
    else { 
        cout << "Unable to open file"; 
    }

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM