C ++ код, чтобы найти все IP-адреса в файле - PullRequest
0 голосов
/ 06 февраля 2009

Мне нужно написать программу для сканирования текстового файла и получения всех IP-адресов (в формате 256.256.256.256) в файле.

Ответы [ 4 ]

5 голосов
/ 06 февраля 2009

Вы можете написать BNF, используя Boost :: spirit или создать регулярное выражение для поиска IP-адресов, используя Boost :: regex

2 голосов
/ 06 февраля 2009

Может быть, вам стоит попробовать использовать регулярные выражения? Вы можете прочитать файл, возможно, сканируя его построчно, а затем использовать регулярное выражение в строке для извлечения IP-адресов.

Если файл содержит только IP-адреса и никакой другой текст, может быть проще использовать scanf с "%hhu.%hhu.%hhu.%hhu" в качестве строки формата.

1 голос
/ 06 февраля 2009

Это регулярное выражение поможет вам:

\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

Измените этот код для ваших конкретных потребностей:

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 );
    }
}
0 голосов
/ 06 февраля 2009

Это действительно должен быть C ++? Регулярные выражения и grep ваши друзья!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...