Je dois écrire un programme pour analyser un fichier texte et récupérer toutes les adresses IP (au format 256.256.256.256) dans le fichier.Code C++ pour trouver toutes les adresses IP dans un fichier
Répondre
Vous pouvez écrire un BNF en utilisant Boost::spirit ou créer une expression régulière pour trouver les adresses IP en utilisant Boost::regex
Peut-être que vous devriez essayer d'utiliser des expressions régulières? Vous pouvez lire le fichier, en l'analysant ligne par ligne, puis utiliser une expression régulière sur la ligne pour extraire les adresses IP.
Si le fichier contient uniquement des adresses IP et aucun autre texte, il peut être plus facile d'utiliser scanf
, avec "%hhu.%hhu.%hhu.%hhu"
comme chaîne de format.
Est-ce que ça doit vraiment être C++? Les expressions régulières et grep
sont vos amis!
Peut-être veut-il établir des connexions avec les adresses IP qu'il lit. – dreamlax
Cette expression régulière fera l'affaire:
\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
Modifier ce code pour vos besoins spécifiques:
using namespace System::Text::RegularExpressions;
void doTheMatch(String^ inputString, String^ filter)
{
Console::WriteLine("original string: {0}", inputString);
Console::WriteLine("attempt to match: {0}", filter);
Regex^ regex = gcnew Regex(filter);
Match^ match = regex->Match(inputString);
if (! match->Success)
{
Console::WriteLine(
"Sorry, no match of {0} in {1}", filter, inputString);
return;
}
for (; match->Success; match = match->NextMatch())
{
Console.WriteLine(
"The characters {0} match beginning at position {1}",
match->ToString(), match->Index);
}
}
256 n'est pas un octet valide, par la manière. – paxdiablo
Merci à tous pour vos contributions. Expression régulière c'est .. Prévoyant aussi d'utiliser perl, devinez le rendra beaucoup plus simple. –