2010-05-26 20 views
0

Je veux écrire un programme en C++ qui obtient une phrase et insère un espace entre chaque mot et la ponctuation dedans! dans le script sed cela se fait avec cette expression:Comment séparer les ponctuations dans une phrase avec un espace entre chaque phrase et la ponctuation en C++?

sed -e "s/,\([^0-9]\)/ , \1/g" -e "s/\.\([^0-9]\)/ . \1/g" -e 's/\.[ ]*$/ ./g' -e "s/\'/ \' /g" -e 's/?/ ?/g' -e 's/\`\`/ `` /g' -e "s/\' \'/''/g" -e 's/(/ (/g' -e 's/)/) /g' -e 's/ \. \([^$]\)/. \1/g' -e "s/\' s/\'s/g" -e "s/\"\([^\"]*\)\"/\" \1 \"/g" $1 | sed -e "s/\"\([^\"]*\)\"/\`\`\1''/g" 

Mais je ne Khow pas comment je devrais le faire en C++ sous Windows! par exemple: devrait convertir un "La question maintenant: Peut-il agir plus comme dur-charge Teddy Roosevelt." doit être converti en "La question maintenant: Peut-il agir plus comme Teddy Roosevelt." Donc une ponctuation telle que '-' ou par exemple un '.' dans "Non" ne devrait pas espacer dans une phrase, mais d'autres signes de ponctuation qui ne reposent pas sur un mot ou une phrase devraient être espacés.

+0

C'est 'sed', pas' Perl' – Zaid

Répondre

3

Puisque vous savez déjà comment gérer cela en utilisant des expressions régulières, je pense que vous pouvez essayer d'utiliser Boost.Regex afin de l'archiver avec C++.

+0

Pouvez-vous m'aider quelle fonction dans boost.regex peut faire cela? C'est un script sed très compliqué, et je suis un débutant en expression régulière! – Yadollah

+1

Jetez un oeil à 'boost :: regex_replace' –