Как сравнить строку с определенными словами и, если найдено совпадение, вывести всю строку - PullRequest
1 голос
/ 01 мая 2011

Я пытаюсь написать небольшую программу, которая будет загружать в файл, сравнивать каждую строку с определенным массивом слов, и если в этой строке есть любое из этих слов, то я хочу «напечатать» эту строку в файл.

Мой текущий код:

int main()
{
    string wordsToFind[13] = 
    {"MS SQL", "MySQL", "Virus", "spoof", "VNC", "Terminal", "imesh", "squid",
    "SSH", "tivo", "udp idk", "Web access request dropped", "bounce"};
    string firewallLogString = "";
    ifstream firewallLog("C:\\firewalllogreview\\logfile.txt");
    ofstream condensedFirewallLog("C:\\firewalllogreview\\firewallLog.txt");
    if(firewallLog.fail())
    {
        cout << "The file does not exist. Please put the file at C:\\firewalllogreview and run this program again." << endl;
        system("PAUSE");
        return 0;
    }
    while(!firewallLog.eof())
    {
        getline(firewallLog, firewallLogString);
            for(int i = 0; i < 13; i++)
            {
                if(firewallLogString == wordsToFind[i])
                {
                    firewallLogString = firewallLogString + '\n';
                    condensedFirewallLog << firewallLogString;
                    cout << firewallLogString;
                }
            }
    }
    condensedFirewallLog.close();
    firewallLog.close();
}

Когда я запускаю программу, она сравнивает строку и, если она совпадает, выводит только конкретное слово вместо строки. Любая помощь будет высоко ценится.

Ответы [ 3 ]

3 голосов
/ 01 мая 2011

Если я правильно понимаю вашу проблему, вы хотите проверить, содержит ли строка одно из слов, и напечатать его, если оно есть.

Прямо сейчас, что вы делаете, это:

Который проверяет, точно ли строка соответствует слову.Таким образом, если строка содержит одно слово, но содержит другие слова, тест не пройден.

Вместо этого проверьте, является ли слово частью строки, например:

if(firewallLogString.find(wordsToFind[i]) != string::npos)
0 голосов
/ 01 мая 2011

Используйте метод поиска std :: string, чтобы найти слова вашего шаблона.

0 голосов
/ 01 мая 2011

В вашем коде что-то не так.в этой строке

getline(firewallLog, firewallLogString);

вы читаете строку, а не слово, но затем вы сравниваете всю строку со словом из вашего массива.Ваш ЕСЛИ не должен работать на самом деле.Вместо этого вам нужно использовать метод strstr, чтобы найти любое слово в вашем firewallLogString и, если он обнаружит, вы делаете оставшуюся часть кода.

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