1

I am trying to write a code to read data from file. The file looks like:

47012   "3101 E 7TH STREET, Parkersburg, WV 26101"
48964   "S16 W22650 W. LINCOLN AVE, Waukesha, WI 53186"
.
.
.
.

I need to store the number as an int and the address as a string.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
ifstream myfile;
myfile.open("input.txt");
long int id;
string address;
myfile >> id;
cout << id << endl;
myfile >> address;
cout << address.c_str() << endl;
myfile.close();
system("pause");
return 0;
}

The output of program

47012
"3101

The output that I need is

47012
3101 R 7TH STREET, Parkersburg, WV 26101

How do I go about doing this. Thanks in advance Any help is appreciated

4

6 回答 6

3

我会做类似以下的事情。不,开个玩笑,我会在现实生活中使用 Boost Spirit。但是,您也可以尝试使用标准库方法:

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

using namespace std;

int main()
{
    ifstream myfile("input.txt");

    std::string line;
    while (std::getline(myfile, line))
    {
        std::istringstream linereader(line, std::ios::binary);

        long int id;

        linereader >> id;
        if (!linereader)
            throw "Expected number";

        linereader.ignore(line.size(), '"');

        string address;
        if (!std::getline(linereader, address, '"'))
            throw "Expected closing quotes";

        cout << id << endl << address << endl;
    }
    myfile.close();
}

印刷:

47012
3101 E 7TH STREET, Parkersburg, WV 26101
48964
S16 W22650 W. LINCOLN AVE, Waukesha, WI 53186
于 2013-06-10T15:15:28.627 回答
2

只需使用getline

while (in >> id) {
    if (!getline(in, address)) {
        // (error)
        break;
    }

    // substr from inside the quotes
    addresses[id] = address.substr(1, address.length() - 2);
}
于 2013-06-10T15:12:18.357 回答
1

这不起作用,因为流运算>>符在尝试读取字符串时会将空格作为分隔符。

您可以使用getline(stream, address, '\t');读取具有特定分隔符的字符串。

或者只是getline(stream, address)如果该行没有其他内容可阅读:

long int id;
string address;
myfile >> id;
getline(stream, address);

这只是一个示例,请参阅@not-sehe的完整解决方案答案(使用读取行getline,然后使用 a 解析每一行stringstream)。

于 2013-06-10T15:06:48.537 回答
0

您可以使用cin.getline()来读取该行的剩余部分。

首先读取数字,然后使用 getline() 读取剩余的所有内容。

于 2013-06-10T15:06:22.503 回答
0

>>运算符在空格处终止字符串。我建议使用

char temp[100];
myfile.getline(temp,max_length);

这一次读取一行。然后您可以使用循环以您想要的方式拆分行。

我想补充一点,您可能需要atoi(char *)(来自模块cytpe.h)函数将整数字符串转换为整数。

于 2013-06-10T15:08:48.353 回答
0
    getline(myfile, address, '"');//dummy read skip first '"'
    getline(myfile, address, '"');
于 2013-06-10T15:11:05.810 回答