관리 메뉴

코코야이야기

[c++] 프로그래밍 실습2 본문

프로그래밍/c++

[c++] 프로그래밍 실습2

코코야 2015. 6. 2. 12:00
반응형

파일 입출력관련 문제

제한시간 50분  ---  25분정도 걸림

 

 

 

문제

 

1. fstream 라이브러리를 사용하여 email.html 파일을 읽어서
그대로 화면에 출력하는 프로그램을 작성한다.
2. email.html 파일의 내용을 text[] 배열에 저장한다.
3. 직선적 스트링 탐색 알고리즘을 구현한 BruteForce 함수를 사용하여 "mailto:" 패턴이 나오는 위치를 탐색한다.
4. "mailto:" 패턴을 찾으면 "(쌍따옴표)가 나올 때까지 text[] 배열에 있는 문자를 화면에 출력한다.
화면에 출력하는 것이 성공하면 파일에 출력하는 것도 시도해 보라

[email.html 파일 내용]

--------------------------------------------------

<html>

<head>

<title>실습 과제 #2</title>

</head>

<body>

<ul>

<li> <a href="mailto:gdhong@hanmail.net">홍길동</a>

<li> <a href="mailto:gsjang@yahoo.co.kr">장길산</a>

<li> <a href="mailto:yhkim@naver.com">김영희</a>

<li> <a href="mailto:cslee@gmail.com">이철수</a>

</ul>

</body>

</html>

--------------------------------------------------

 [출력 예]

gdhong@hanmail.net

gsjang@yahoo.co.kr

yhkim@naver.com

cslee@gmail.com

 직선적 스트링 탐색 알고리즘 (교재에 있는 코드는 약간의 오류가 있으므로 다음 함수를 사용할 것)

--------------------------------------------------

int BruteForce(char *p, char *t)

{

int i, j, M = strlen(p), N = strlen(t);

for (i = 0, j = 0; j < M && i < N; i++, j++)

if (t[i] != p[j]) { i -= j; j = -1; }

if (j == M) return i-M;

else return i;

}

--------------------------------------------------

 

 

 

 

 

 

소스코드

 

#include <iostream>
#include <fstream>
using namespace std;

int BruteForce(char *p, char *t)
{
 int i, j, M = strlen(p), N = strlen(t);
 for (i = 0, j = 0; j < M && i < N; i++, j++)
  if (t[i] != p[j]) { i -= j; j = -1; }
 if (j == M) return i-M;
 else return i;
}


void main()
{
 ifstream file;
 file.open("email.html");
 ofstream f;
 f.open("temp.txt");

 char ch;
 char text[400];
 int i=0; //배열 주소 카운트
 char pattern[50] = "mailto:";
 int j=0,previous=0, pos, M, N;

 if(f.is_open())
  cout<<"임시파일 열기 성공"<<endl;
 else
  cout<<"임시파일 열기 실패"<<endl;

 if(file.is_open())
 {
  cout<<"파일 열기 성공"<<endl;
  while(!file.eof())
  {
   file.get(ch);
   cout<<ch;
   text[i]=ch;
   i++;
  }
  cout<<endl;

  M = strlen(pattern);
  N = strlen(text);

  while(1)
  {
   pos = BruteForce(pattern, text+j);
   pos += previous;
   j = pos + M;
   i=pos+M; //새로 배열 주소저장, 재사용

   if(j<N)
   {
    cout<<"패턴이 발생한 위치 : "<<pos<<endl;

    while(text[i]!='"')
    {
     cout<<text[i];
     i++;
     f<<text[i];
    }
    cout<<endl;
    f<<'\n';
   }
   else
    break;
   previous = j;
  }
  cout<<"스트링 탐색 종료."<<endl;
 }
 else
 {
  cout<<"파일 열기 실패"<<endl;
 }
 file.close();
 f.close();

}

반응형

'프로그래밍 > c++' 카테고리의 다른 글

[c++] 프로그래밍 실습4  (0) 2015.06.03
[c++] 프로그래밍 실습3  (0) 2015.06.03
[c++] 프로그래밍 실습1 - 5  (0) 2015.06.02
[c++] 프로그래밍 실습1 - 4  (0) 2015.06.01
[c++] 프로그래밍 실습1 - 3  (0) 2015.06.01
Comments