如何在c ++中将sentence [i](string)分成单词(string)

时间:2012-01-06 17:21:59

标签: c++ arrays string

我有问题。在我的项目中,我从数据集文件中逐行逐句,每行有一个句子。然后,我应该将句子分成单词。但是我找不到这个怎么办。

这是将从数据集中读取的类代码:

class Input{
...
public:
string *word;
string *sentence;
Couple *couple;    // int x , int y  order of sentence and word
int number;
int line;
...
void readInput(string input);
}

这是读取方法的代码:

void Input::readInput(string input)
{
cout << "Reading the " << input <<endl;

ifstream infile;
infile.open(input.c_str());

    if(!infile.is_open()){
    cerr << "Unable to open file: " << input << endl << endl;
    exit(-1);
}

for(int i=0; i<line ; i++){
    getline(infile, sentence[i]);
    //infile >> sentence[i];
}

for(int j=0;j<line ;j++){
// I want to separate sentences into words
}    

infile.close();
cout << "Finished Reading the " << input <<endl;

}

3 个答案:

答案 0 :(得分:4)

for(int j=0; j<line; ++j)
{
    std::istringstream iss(sentence[j]);
    for (std::string w; iss >> w; )
    {
        word[number] = w;
        ++number;
    }
}

如果您不希望那些与您的文字相关联,那么您需要对标点符号做一些事情。我觉得很简单。

答案 1 :(得分:1)

如果您使用的方法是我:

for(int j=0;j<line ;j++){
    // I want to separate sentences into words
}

我会使用正则表达式来匹配sentence[j] boost regex中的所有单词,这是我过去使用过的非常成功的库。

答案 2 :(得分:0)

您可以尝试通过使用std :: string :: find_first_of()查找单词结束标记来遍历表示每行的std :: string。 find_first_of的参数是用于分隔文本文件中的单词的字符集(可以是空格,句点等)。