我必须将带有段落的输入文件解析成句子。输出中的每一行对应一个句子。这大部分是正确的,但我无法得到理想的结果。
我被要求使用的分隔符是:
测试输入: 第一个故事是关于连接点。
我在最初的6个月后退出了里德学院,但在我真正退出之前,我又待了18个月左右。那我为什么要退学呢?
它始于我出生之前。我的亲生母亲是一名年轻的,未婚的大学毕业生,她决定让我收养。她非常强烈地感到我应该被大学毕业生收养,所以我的一切都是为了让我在出生时被律师和他的妻子收养。除了当我突然出现时他们在最后一分钟决定他们真的想要一个女孩。所以我的父母,他们在等候名单上,在半夜接到电话询问:"我们有一个意外的男婴;你想要他吗?"他们说:"当然。"我的亲生母亲后来发现,我母亲从未大学毕业,父亲从未高中毕业。她拒绝签署最终的收养文件。几个月后,当我父母答应我有一天会上大学时,她才心软了。
#include "FileIOs_WordPairs.h"
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
bool sentenceSplitter(string& fname, vector<string>& sentences)
{
ifstream file;
string temp;
size_t pos = 0;
string token;
file.open(fname);
if (file.fail())
{
cerr << "Failed to open the file" << endl;
return(-1);
}
while (getline(file, temp))
{
istringstream iss(temp);
while ((pos = temp.find_first_of(".")) != string::npos)
{
token = temp.substr(0, pos);
if (token.length() != 0)
cout << token << endl;
temp = temp.substr(pos + strlen("."));
}
while ((pos = temp.find_first_of("?")) != string::npos)
{
token = temp.substr(0, pos);
if (token.length() != 0)
cout << token << endl;
temp = temp.substr(pos + strlen("?"));
}
while ((pos = temp.find_first_of(".\"")) != string::npos)
{
token = temp.substr(0, pos);
if (token.length() != 0)
cout << token << endl;
temp = temp.substr(pos + strlen(".\""));
}
while ((pos = temp.find_first_of("?\"")) != string::npos)
{
token = temp.substr(0, pos);
if (token.length() != 0)
cout << token << endl;
temp = temp.substr(pos + strlen("?\""));
}
}
}
预期产出:
当前输出:
简单地说,我无法找到使用方法。&#34;和?&#34;作为分隔符
答案 0 :(得分:0)
使用boost库很容易:
#include <iostream>
#include <string>
#include <boost/algorithm/string/regex.hpp>
int main()
{
using namespace std;
vector< string > results;
std::string text = "Hi! How are you?? Today is a nice day.";
boost::algorithm::split_regex( results, text, boost::regex( "\\!|\\.|\\?\\?" ) ) ;
for(string sentence:results)
std::cout << "[" << sentence << "]" << std::endl;
}
编译:
g++ -std=c++11 main.cpp -lboost_regex && ./a.out
结果:
[Hi]
[ How are you]
[ Today is a nice day]
[]