我得到helloworld
的测试字符串,我必须找到n-gram,具体说明是3
。因此,我的代码应该给我输出:
hel, ell, llo, low, owo, wor, orl, rld,
我写的代码如下:
vector<string> generate_ngrams(string w, size_t n) {
vector<string> ngrams;
for (auto i = 0; i < n; i++) {
ngrams.push_back(w.substr(i * n, n));
}
return ngrams;
我的代码获得的输出:
hel, low, orl,
我如何操作到目前为止的代码,以便for循环调用某种类型的推回到“e”,然后找到它后面的两个字母,并继续这样做,直到它可以不再这样做了吗?
以下是主要调用的内容,以查看被抛出的内容:
case 2:{
string s;
int n;
cin >> n;
cin.ignore(100, '\n');
getline(cin, s);
auto v = generate_ngrams(s, n);
copy (v.begin(), v.end(), oss);
cout << endl;
break;
}
答案 0 :(得分:0)
n是子级的大小,而不是w的大小。
for (int i = 0; i <= w.length() - n; ++i)
{
ngrams.push_back(w.substr(i, n));
}