В этом примере кода я использую const ref для вектора и проверяю условия в четырех функциях. Если был большой список каждого из условий (например, все глаголы в базе данных (например, английский словарь), было бы лучше проверить, что в классе Token перед передачей функции (поэтому функция просто получает значение глагол) или лучше, чтобы проверить внутри функции (так сама функция должна проверить базу данных)?Простой алгоритм анализа строк
#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool full_stop_check(vector<string> &sentence);
bool verb_check(vector<string> &sentence, int index);
bool noun_check(vector<string> &sentence, int index);
bool conj_arti_check(vector<string> &sentence, int index);
int main()
{
vector<string> sentence;
string temp_word;
while(cin >> temp_word)
{
sentence.push_back(temp_word);
}
// Output test (commented out)
// for (string x : sentence)
// cout << x << '\n';
// Check for sentence
if (full_stop_check(sentence))
cout << "It is a sentence." << '\n';
else
cout << "It is not a sentence." << '\n';
return 0;
}
bool full_stop_check(vector<string> &sentence)
{
int index = sentence.size()-1;
// Full Stop Check
if (sentence[index] != ".")
return false;
--index;
if (index < 0)
return false;
return verb_check(sentence, index); // full stop (not first character)
}
bool verb_check(vector<string> &sentence, int index)
{
// Verb Check
if (sentence[index] != "verb")
return false;
--index;
if (index < 0)
return false;
return noun_check(sentence, index); // verb (not first word)
}
bool noun_check(vector<string> &sentence, int index)
{
// Noun Check
if (sentence[index] != "noun")
return false;
--index;
if (index < 0) // first word is a noun
return true;
return conj_arti_check(sentence, index); // noun (not first word)
}
bool conj_arti_check(vector<string> &sentence, int index)
{
// Conjugation & Article Check
if (sentence[index] != "conjugation" && sentence[index] != "article")
return false;
// If it is either an article or conjugation
if (index == 0 && sentence[index] == "article") // first word is an article
return true;
else if (index == 0) // first word not article (or noun)
return false;
else if (sentence[index] == "conjugation") { // conjugation
--index;
return verb_check(sentence, index);
}
else { // article (not first word)
--index;
return conj_arti_check(sentence, index); // recursion
}
}
_It is c оспаривание и работа в порядке, _... _Это элегантное решение? Что именно вы ищете? Консенсус, основанный на мнении, только на открытом форуме невозможен. – ryyker
Есть ли что-то конкретное, что вы хотите улучшить? – DimChtz
Очень правдиво, я думаю, мне было интересно, стоит ли работать назад на предложение. Это можно было сделать вперёд, но если он использовался для разбора нескольких предложений, он мог бы откусить их один за другим таким образом. Я не совсем уверен, что я ищу, просто полезный комментарий или два. ура – alexi2