开发者

How to compare a string with certain words and if a match is found print the whole string

I am trying to write a little program that will load in a file, compare each line with a specific array of words, and if that line has any of those words in it then I want to "print" that li开发者_开发百科ne out to a file.

My current code is:

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();
}

When I run the program it will compare the string, and if it matches it will only print out the specific word instead of the string. Any help would be much appreciated.


If I understand your problem correctly, you want to check if the line contains one of the word and print it if it does.

Right now what you are doing is this:

if(firewallLogString == wordsToFind[i])

Which checks if the string exactly matches the word. So, if the string contains one of the word but has other words in it, the test will fail.

Instead, check if the word is part of the string, like this:

if(firewallLogString.find(wordsToFind[i]) != string::npos)


There is something wrong in your code. in this line

getline(firewallLog, firewallLogString);

you are reading a line, not a word, but then later you are comparing the whole line with a word from your array. Your IF shall not work actually. Instead you need to use strstr method, to lookup for any word in your firewallLogString and if it finds you do the rest of your code.


Use std::string's find method to find the occurrence of your pattern words.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜