코코야이야기
[c++] 프로그래밍 실습2 본문
파일 입출력관련 문제
제한시간 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>
--------------------------------------------------
[출력 예]
※ 직선적 스트링 탐색 알고리즘 (교재에 있는 코드는 약간의 오류가 있으므로 다음 함수를 사용할 것)
--------------------------------------------------
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 |