为单独解析的句子创建向量c ++

时间:2014-02-26 05:12:37

标签: c++ parsing vector

class Read
{
public:
    Read(const char* filename)
    :mFile(filename)
    {

    }
    void setString()
    {
        while(getline(mFile, str, '.'))
        {
            getline(mFile, str, '.');
            str.erase(std::remove(str.begin(), str.end(), '\n'), str.end());
        }

    }
private:
    ifstream mFile;
    string str;
};


int main()
{
    Read r("sample.txt");
    return 0;
}

我的最终目标是解析文件中的每个句子,因此我使用getline将分隔符设置为“。”得到每个句子。我想创建一个句子向量,但我不确定如何这样做。

文件很大,所以会有很多句子。如何为每个句子创建一个向量?

它只是矢量<字符串>海峡?它怎么知道尺寸?

编辑:我添加了一行代码来删除'\ n' 编辑:摆脱!eof

3 个答案:

答案 0 :(得分:2)

while(!myFile.eof())
        getline(mFile, str, '.');
你在哪里找到的?请把它放回去。尝试:

std::vector<std::string> sentences;

while(std::getline(mFile, str, '.'))
    sentences.push_back(str);

vector容器具有.size()函数,用于返回已填充元素的数量。你应该google“std :: vector”并阅读API中的函数。

答案 1 :(得分:2)

向量是动态数组。您无需担心矢量的大小。您可以使用push_back()函数在向量中添加元素。我在您的代码中进行了一些更改。请检查这是否适合您..

#include<vector>
using namespace std;
class Read
{
public:
    Read(const char* filename)
    :mFile(filename)
    {

    }
    void setString()
    {
        while(getline(mFile, str, '.'))
        {
            vec.push_back(str);
        }
    }
private:
    ifstream mFile;
    string str;
    vector<string> vec;
};
int main()
{
    Read r("sample.txt");
    return 0;
}

答案 2 :(得分:1)

#include <vector>
using namespace std;

...

vector<string> sentences;
sentences.push_back(line);

向量是一个动态数组,当你不断添加句子时它会自行调整大小。如果你知道句子的数量,你可以通过调用:

来提高性能
sentences.resize(number of sentences here)