Alors you have said vous savez comment tokenize une chaîne. (Si vous ne passez pas un peu de temps ici: https://stackoverflow.com/a/38595708/2642059) Donc, je vais supposer que l'on nous donne un vector<string> foo
qui contient des mots avec une éventuelle ponctuation.
for(auto it = cbegin(foo); it != cend(foo); ++it) {
if(none_of(next(it), cend(foo), [&](const auto& i) {
const auto finish = mismatch(cbegin(*it), cend(*it), cbegin(i), cend(i));
return (finish.first == cend(*it) || !isalnum(*finish.first)) && (finish.second == cend(i) || !isalnum(*finish.second));
})) {
cout << *it << ' ';
}
}
Live Example
Il convient de noter ici que vous ne nous avez pas donné des règles sur la façon de gérer des mots tels que: « vers le bas », « downvote » et « downvote » Cet algorithme suppose que la 1 st 2 sont égaux. Vous ne nous avez pas non plus donné de règles sur la façon de gérer: "Pourquoi faisons-nous ici, ici?" Cet algorithme renvoie toujours la répétition finale, de sorte que la sortie serait "Pourquoi sommes-nous ici?" Si les présomptions faites par cet algorithme ne vous plaisent pas totalement, laissez moi un commentaire et nous travaillerons à vous familiariser avec ce code pour vous permettre de faire les ajustements dont vous avez besoin.
[Chaîne Tokenize.] (https://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c) – Mahesh
Duplication possible de [Méthode la plus élégante pour diviser une chaîne?] (https: // stackoverflow .com/questions/236129/le plus élégant-façon-de-fendre-une-chaîne) –
@ Leonardo Pouvez-vous me dire comment? – Shubham