在c ++中读取.text文件的一部分

时间:2015-03-19 11:38:32

标签: c++

我有一个.txt文件如下:

Peter   He is a boy.

Mary    She is a girl.

Tom     It is a cat.

...

我想使用c++读取文件并将名称存储到字符串name[]的数组中,并将描述存储到另一个字符串description[]的数组中,但不包含fullstop“。 ”

名称和说明用标签分隔。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

我只知道如何阅读整行或一个单词。

这就是我写的:

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

int main(){
    string line[6153];

    ifstream fin;
    fin.open("dict.txt");
    if (fin.fail()){
        cout << "File input failed.\n";
        exit(1);
    }

    else{
        int i;
        for (i = 0; i < 6153; i++){
            getline(fin, line[i]);      
        }
    }
    fin.close();
    return 0;
}

P.S。 “dict.txt”中有6153行。

答案 1 :(得分:-1)

假设您已经知道如何阅读文本文件的整行,您可以使用特定字符分隔文本(我使用&#39;,很多)。

例如,你可以阅读#34中的第一行; Peter He是个男孩。&#34;但是如果你把它设置为一个分隔的字符串,它可能看起来像这样#彼得,他是个男孩。&#34;。然后你可以循环遍历字符串的每个字符,直到问题中的特定字符=&#39;,&#39;然后你可以相应地拆分字符串。

这样的事情可能是你正在寻找的东西:

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

int main()
{
    vector<string> lines(3);
    vector<string> names(3);
    vector<string> descriptions(3);
    lines.at(0) = "Peter,He is a boy.";
    lines.at(1) = "Mary,She is a girl.";
    lines.at(2) = "Tom,It is a cat.";

    for(int i = 0; i < lines.size(); i++) {
        for(int j = 0; j < lines[i].size(); j++) {
            if(lines[i][j] == ',') {
                for(int d = 0; d < j; d++) {
                    stringstream ss;
                    ss << lines[i][d];
                    ss >> names.at(i);
                }
                for(int d = j + 1; d < lines[i].size(); d++) {
                    if(lines[i][d] != '.') {
                        stringstream ss;
                        ss << lines[i][d];
                        ss >> descriptions.at(i);
                    } else {
                        break;
                    }
                }
                break;
            }
        }
    }
}

编辑:此代码将查找3个空格而不是单个字符&#39;,&#39;。

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

int main()
{
    vector<string> lines(3);
    vector<string> names(3);
    vector<string> descriptions(3);
    lines.at(0) = "Peter,He is a boy.";
    lines.at(1) = "Mary,She is a girl.";
    lines.at(2) = "Tom,It is a cat.";

    for(int i = 0; i < lines.size(); i++) {
        for(int j = 0; j < lines[i].size(); j++) {
            if(lines[i][j] == 0x20 && lines[i][j + 1] == 0x20 && lines[i][j + 2] == 0x20) {
                for(int d = 0; d < j; d++) {
                    stringstream ss;
                    ss << lines[i][d];
                    ss >> names.at(i);
                }
                for(int d = j + 3; d < lines[i].size(); d++) {
                    if(lines[i][d] != '.') {
                        stringstream ss;
                        ss << lines[i][d];
                        ss >> descriptions.at(i);
                    } else {
                        break;
                    }
                }
                break;
            }
        }
    }
}

还有一点提示不要投票给一个实际有效的答案,因为它不是你希望的快速解决方案,或者你不理解它......