2011-04-30 6 views
1

파일로로드하고 각 행을 특정 단어 배열과 비교하고 해당 행을 비교하는 작은 프로그램을 작성하려고합니다. 그 단어들 중 하나를 가지고 있다면 그 줄을 파일에 "인쇄"하고 싶습니다.문자열을 특정 단어와 비교하고 일치하는 것이 발견되면 전체 문자열을 인쇄하십시오.

내 현재 코드는 다음과 같습니다

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

문제가 제대로 이해되면 줄에 단어 중 하나가 포함되어 있는지 확인하고 오류가 있으면 인쇄하십시오. 문자열 정확히 단어가 일치하는 경우 확인

if(firewallLogString == wordsToFind[i]) 

:

은 지금 당신이하고있는 일이있다. 따라서 문자열 중 하나가 포함되어 있지만 다른 단어가 있으면 테스트가 실패합니다. 당신의 패턴 단어의 발생을 찾을 수

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

이것은 정확하게 내가해야 할 일입니다. 감사합니다! – Huntertusk

0

코드에 문제가 있습니다. 이 라인

getline(firewallLog, firewallLogString); 

에서 당신은 라인이 아닌 단어를 읽고,하지만 나중에 당신은 당신의 배열에서 단어 전체 라인을 비교한다. IF는 실제로 작동하지 않습니다. 대신 strstr 메서드를 사용하여 firewallLogString의 단어를 찾아보고 코드의 나머지 부분을 찾으면됩니다.

0

를 사용하여 표준 : : 문자열의 찾기 방법 : 단어가의 부분이 같은 문자열 인 경우

대신 확인합니다.

관련 문제