SlideShare a Scribd company logo
1 of 28
Download to read offline
10장 문자열 클래스와 파일 클래스
차례 
문자열 객체 생성 
파일 객체 생성 
출력형식 지정자 
fstream 클래스 
이진 파일의 입출력 
임의 접근 파일 
2/28
C++ 라이브러리에서 제공하는 클래스 
•자주 사용하는 객체에 대한 클래스에 대해 C++ 라이브러리에서 미리 정의해 놓았다!! 
•문자열 처리를 담당하는 string 클래스 
•파일 처리를 담당하는 fstream 클래스 
•클래스 정보를 담은 헤더파일을 포함하고 사용해야 함 
3/28
string 
•string 
•문자열 클래스 
•멤버 변수와 멤버 함수가 이미 정의되어 있음 
•문자열 객체 생성하기 
string s_name; //객체 s_name 이 생성 
string s_name(“김갑순”); //객체 s_name 을 생성하면서 문자열을 매개변수로 하는 생성자 호출 
string s_name=“김갑순”; 
4/28
#include <iostream> #include <string> //문자열 클래스 사용을 위해 포함 using namespace std; int main() { string s_name; //스트링 클래스의 객체 생성 s_name="문자열"; //대입문으로 직접 문자열 할당 가능 cout << s_name << endl; cout <<"문자열 길이 : " << s_name.length() << endl; s_name=s_name+"클래스"; //문자열 연산자 사용 가능 //s_name.append("클래스"); cout << s_name << endl; cout <<"문자열 길이 : " << s_name.length() << endl; return 0; } 
5/28 
문자열 클래스 예제
문자열 클래스 생성자 
•생성자 
함수 형태 
의미와 예 
string ( ) 
빈 문자열 객체를 생성 
string str1; 
string (문자열객체) 
객체를 생성하고 생성자에 문자열 객체를 전달 
string name(str1); //str1은 이미 생성된 문자열 객체 
string (char *) 
객체를 생성하고 생성자에 문자열을 전달 
char s[10]=“Computer”; 
string str2(s); 
string (개수, 문자) 
객체를 생성하고 개수와 문자를 전달, 문자를 해당 개수만큼 갖는 문자열 객체 생성 
string str3(5, ‘A’); 
6/28
문자열 클래스 append 함수 
•문자열 추가 함수 
함수 형태 
의미와 예 
append(문자열) 
객체에 전달한 매개변수인 문자열을 덧붙인다. 
string newStr=“Computer”; 
newStr.append(“Science”); //”ComputerScience” 
append(문자열, 시작위치, 개수) 
객체에 전달한 문자열에서 시작위치에서 개수만큼의 문자열을 덧붙인다. 
string newStr; 
newStr.append(“ComputerScience”, 0, 8); “Computer” 
append(개수, 문자) 
객체에 지정한 개수만큼 해당 문자를 덧붙인다. 
string newStr=“Computer”; 
newStr.append(3, ‘!’); //”Computer!!!” 
7/28
문자열 클래스 assign 함수 
•문자열 추가 함수 
함수 형태 
의미와 예 
assign(문자열) 
객체에 전달한 매개변수인 문자열로 초기화된다. 
string newStr=“Computer”; 
newStr.assign(“Science”); //”Science” 
assign(문자열, 시작위치, 개수) 
assign(문자열, 개수) 
객체에 전달한 문자열에서 시작위치에서 개수만큼의 문자열로 초기화된다. 
string newStr; 
newStr.assign(“ComputerScience”, 8, 7); //“Science” 
newStr.assign(“ComputerScience”, 8); //“Computer” 
assign(개수, 문자) 
객체에 지정한 개수만큼 해당 문자를 덧붙인다. 
string newStr=“Computer”; 
newStr.assign(3, ‘!’); //”!!!” 
8/28
문자열 멤버 함수 : at(), length(), size(), clear(), erase() 
함수 형태 
의미와 예 
at(위치) 
문자열 객체에서 지정한 위치의 문자를 반환한다. 문자 위치는 0부터 시작한다. 
string newStr=“Computer”; 
char rChar=newStr.at(0); //’C’ 
length(), size() 
문자열 객체에 저장한 문자열 길이를 반환한다. 
string newStr=“Programming”; 
int LenString=newStr.length(); //11 
clear(), erase(위치, 개수) 
clear() : 객체를 빈 문자열로 초기화 
erase(위치, 개수) : 지정된 위치부터 해당 개수만큼 문자를 삭제함 
string newStr=“Computer”; 
newStr.erase(6,2); //”Comput” 
newStr.clear(); //문자열이 모두 삭제됨 
9/28
문자열 멤버 함수 : empty(), substr(), swap() 
함수 형태 
의미와 예 
empty() 
문자열 객체가 아무 내용도 저장하고 있지 않으면 true, 아니면 false를 반환한다. 
string newStr=“Computer”; 
newStr.empty(); // true 반환 
substr(위치, 개수) 
문자열 객체의 지정한 위치에서 해당 개수만큼의 문자로 이루어진 문자열을 반환한다. 
string newStr="ComputerScience"; 
newStr.substr(0, 8); //0번째부터 8번째까지의 문자 모음인 "Computer"가 반환됨 
swap(문자열) 
전달받은 매개변수인 문자열 객체로 교환한다. 
string newStr1 ("Computer), newStr2("Science"); 
newStr1.swap(newStr2); //newStr1과 newStr2의 값이 서로 교환된다. 
10/28
문자열 멤버 함수 : find(), replace() 
함수 형태 
의미와 예 
find(문자) 
find(문자, 시작위치) 
문자열 객체에서 지정한 문자를 0번째 부터 찾아서 그 위치를 반환 
string newStr="ComputerScience"; 
newStr.find('e'); //문자는 0번째부터 위치를 표시, 따라서 6을 반환함 
newStr.find('e', 8); //8번째 이후 문자 'e'는 11번째에 있으므로 11을 반환함 
find(문자열) 
find(문자,열 시작위치) 
문자열 객체에서 지정한 문자열을 0번째부터 찾아서 그 위치를 반환 
string newStr="Test1Test2Test3Test4", newStr2="Test"; 
newStr.find(newStr2); //0번째부터 문자열 newStr2를 찾아서 0을 반환 
newStr.find(newStr2, 5); //5번째 위치부터 문자열 newStr2의 위치를 찾아서 반환함 
swap(문자열) 
문자열 객체의 해당 위치에서 매개변수로 전달한 문자열로 개수만큼의 문자로 변경 
string newStr1 ("Computer), newStr2("Science"); 
newStr1.replace(0, 2, newStr2) // newStr1이 "Scmputer"로 변경 
11/28
문자열 멤버 함수 : compare(), insert() 
함수 형태 
의미와 예 
compare(문자열) 
compare(시작위치, 개수, 문자열) 
문자열 객체와 매개변수 문자열 객체와 같은가를 비교한다. 만약 기준 문자열이 크면 1, 매개변수 문자열이 크면 -1, 같으면 0을 반환 
string Str1=“Computer”, Str2=“Science”; 
Str1.compare(Str2); //-1을 반환 
insert(시작위치, 문자열) 
insert(시작위치, 개수, 문자) 
문자열 객체에서 지정한 문자열을 지정한 위치에 삽입해서 반환한다. 
string str1="AAAA", str2="BBBB"; 
str1.insert(0, str2); // str1이 "BBBBAAAA"으로 갱신됨 
str1.insert(4, 3, 'C'); //str1이 'C'를 세 개 삽입해서 "BBBBCCCAAAA"으로 갱신됨 
12/28
문자열 클래스 연산자 
•문자열 클래스는 연산자를 이용해서 
•문자열 대입, 추가, 비교 등을 실행한다. 
연산자 
설명 
비고 
[ ] 
배열 첨자로 문자를 참조 
문자열 클래스에 연산자 오버로딩이 정의되어 가능한 것임 
(13장 연산자 오버로딩) 
= 
한 문자열의 내용을 문자열 객체에 대입, assign() 함수를 대신함 
+ 
문자열과 문자열을 결합하여 하나의 문자열로 완성, append() 함수를 대신함 
+= 
하나의 문자열을 다른 문자열에 추가 
<< 
문자열을 스트림으로 삽입 
>> 
스트림 으로부터 문자열 추가 
==, !=, < 
문자열 간의 논리 연산 수행 
<=, >, >= 
문자열 간의 관계 연산 수행 
13/28
파일 출력 객체 
•파일 출력 객체 
–#include <fstream> 
–출력 내용을 파일 객체로 전달하면 됨!!! 
–출력 객체 생성  파일 열기(open())  출력 
–파일 사용을 마치고 파일 닫기(close()) 
ofstream 파일출력객체; 
파일출력객체.open(“출력파일이름”); 
파일출력객체 << 출력 내용; 
파일출력객체.close(); 
14/28
표준 출력 코드와 파일 출력 코드 비교 
프로그램 
실행 결과 
예제1 
#include <iostream> 
using namespace std; 
int main( ) 
{ 
cout << "즐거운 프로그래밍!!!" << endl; 
return 0; 
} 
//모니터 
즐거운 프로그래밍 
예제2 
#include <iostream> 
#include <fstream> 
using namespace std; 
int main( ) 
{ 
ofstream output; 
output.open("test.txt"); 
output << "즐거운 프로그래밍!!! " << endl; 
output.close( ); 
return 0; 
} 
//파일 
15/28
파일 입력 객체 
•파일 입력 객체 
–#include <fstream> 
–입력 내용을 파일 객체에서 입력받음!!! 
–입력 객체 생성  파일 열기(open())  입력 
–파일 사용을 마치고 파일 닫기(close()) 
ifstream 파일출력객체; 
파일입력객체.open(“입력파일이름”); 
파일입력객체 >> 입력 내용저장변수; 
파일입력객체.close(); 
16/28
표준 입력 코드와 파일 입력 코드 비교 
프로그램 
실행 결과 
예제1 
int main( ) 
{ 
char message[80]; 
cin >> message; 
cout << message << endl; 
return 0; 
} 
프로그래밍 키보드로입력 
프로그래밍  화면에 출력 
예제2 
#include <iostream> 
#include <fstream> 
using namespace std; 
int main( ) 
{ 
ifstream input; 
char message[80]; 
input.open("test.txt"); 
input >> message; 
cout << message << endl; 
input.close( ); 
return 0; 
} 
즐거운프로그래밍!!! 
17/28
파일 존재 여부 확인 멤버 함수 
•fail() 
–true : 파일 열기로 인해 파일 객체가 가리키는 파일이 없음을 의미 
–false : 파일 열기로 인해 파일 객체가 가리키는 파일이 있음을 의미 
18/28
파일의 마지막 위치 확인 멤버 함수 
•eof() 
–true : 파일 포인터가 파일 마지막에 위치함 
–fail : 파일 포인터가 파일 마지막이 아님을 의미함 
19/28
파일 읽기/ 파일로 출력하기 
20/28
출력형식 지정자 
•출력형식 지정자 
–#include <iomanip> 
–setw(폭) : 출력 폭을 결정 
–setprecision(유효자릿수) : 소수점 이하 자릿수 
–fixed : 실수형을 본래 형태로 출력 
–showpoint : 소수점 출력 
21/28
fstream 클래스 
•fstream 클래스 = ofstream + ifstream 
•파일 객체 생성 후 open() 함수에서 파일 모드를 
정할 수 있음 
파일모드 
설명 
예 
ios::in 
파일에서 읽어오기 
파일객체.open(파일이름, ios::in); 
ios::out 
파일에 출력하기 
파일객체.open(파일이름, ios::out); 
ios::app 
파일에 추가하여 출력하기 
파일객체.open(파일이름, ios::app); 
ios::trunc 
파일이 이미 존재하는 경우 삭제하고 새로운 파일로 생성하여 출력 
파일객체.open(파일이름, ios::trunc); 
ios::binary 
이진 파일로 처리하기 
파일객체.open(파일이름, ios::in | ios::binary); 
파일객체.open(파일이름, ios::out | ios::binary); 
22/28
fstream 클래스 예시 
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { fstream fs; fs.open("test.txt", ios::out); if (fs.fail()) return 0; fs << "keyboard" << endl; fs << "monitor" << endl; fs.close(); 
fs.open("test.txt", ios::app); 
fs << "desk" << endl; 
fs.close(); 
fs.open("test.txt", ios::in); 
string temp; 
while (fs >> temp, !fs.eof()) 
{ 
cout << temp << endl; 
} 
fs.close(); 
return 0; 
} 
23/28
이진 파일 입출력 
•이진 파일은 바이트 단위로 입출력 
–파일에 출력 함수 
–파일에서 입력 함수 
fstream 객체이름.write(char *, 바이트수); 
fstream 객체이름.read(char *, 바이트수); 
24/28
이진 파일 입출력 예시1 
#include <iostream> 
#include <fstream> 
using namespace std; 
int main() 
{ 
fstream fp; 
int score[5]={78, 96, 100, 25, 96}; 
fp.open ("sample.txt", ios::out | ios::binary); //출력 이진파일 설정 
fp.write((char*)score, 20); //score 위치에서 20바이트 출력 
fp.close(); 
return 0; 
} 
25/28
이진 파일 입출력 예시2 
#include <iostream> #include <iomanip> #include <fstream> using namespace std; int main() { fstream fp; int score; fp.open ("sample.txt", ios::in | ios::binary); //입력-이진파일 if (fp.fail()) //파일열기 실패하면 프로그램 종료 return 1; while (fp.read((char*)&score, 4), !fp.eof()) cout << setw(3) << right << score<< endl; fp.close(); return 0; } 
26/28
임의 접근 파일 
•이진 파일의 경우 파일 포인터 위치를 임의로 이동할 수 있음 
–seekp(), seekg() 
–이동기준 
멤버함수 
설명 
seekp(바이트, 이동기준) 
파일에 출력할 때 파일 포인터를 지정한 만큼 이동 
seekg(바이트, 이동기준) 
파일에 입력할 때 파일 포인터를 지정한 만큼 이동 
이동기준 
설명 
ios::beg 
파일의 처음 시작위치부터 지정한 바이트 만큼 이동 
ios::end 
파일의 마지막 위치에서 지정한 바이트 만큼 역으로 이동 
ios::cur 
현재 이치부터 지정한 바이트 만큼 이동 
27/28
임의 접근 파일 예시 
#include <iostream> #include <iomanip> #include <fstream> using namespace std; int main() { fstream fp; int score; fp.open ("sample.txt", ios::in | ios::binary); if (fp.fail()) return 1; fp.read((char *) &score, 4); cout << setw(3) << right << score<< endl; fp.seekg(4, ios::cur); fp.read((char *) &score, 4); cout << setw(3) << right << score<< endl; fp.close(); return 0; } 
28/28

More Related Content

What's hot

파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Yong Joon Moon
 
Ch.14 파일 강c v0.6
Ch.14 파일 강c v0.6Ch.14 파일 강c v0.6
Ch.14 파일 강c v0.6승태 김
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)MIN SEOK KOO
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)SeongHyun Ahn
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기Yong Joon Moon
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initializationEunjoo Im
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)MIN SEOK KOO
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기Yong Joon Moon
 
배열과 포인터
배열과 포인터배열과 포인터
배열과 포인터영기 김
 
파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301Yong Joon Moon
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형Hyosang Hong
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장Software in Life
 
Swift3 typecasting nested_type
Swift3 typecasting nested_typeSwift3 typecasting nested_type
Swift3 typecasting nested_typeEunjoo Im
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131Yong Joon Moon
 

What's hot (20)

파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706
 
Ch.14 파일 강c v0.6
Ch.14 파일 강c v0.6Ch.14 파일 강c v0.6
Ch.14 파일 강c v0.6
 
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
이것이 자바다 Chap.14 람다식 Lambda expression(java)(KOR)
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)빠르게 활용하는 파이썬3 스터디(ch1~4)
빠르게 활용하는 파이썬3 스터디(ch1~4)
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
 
배열과 포인터
배열과 포인터배열과 포인터
배열과 포인터
 
파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
자바스크립트 패턴 3장
자바스크립트 패턴 3장자바스크립트 패턴 3장
자바스크립트 패턴 3장
 
Swift3 typecasting nested_type
Swift3 typecasting nested_typeSwift3 typecasting nested_type
Swift3 typecasting nested_type
 
Java lambda
Java lambdaJava lambda
Java lambda
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 

Similar to 10장 문자열 클래스와 파일 클래스

Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10hungrok
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)유석 남
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Circulus
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Ji Hun Kim
 
Perl Script Document
Perl Script DocumentPerl Script Document
Perl Script Document오석 한
 
고급 시스템 프로그래밍
고급 시스템 프로그래밍고급 시스템 프로그래밍
고급 시스템 프로그래밍junghee yu
 
고급 시스템 프로그래밍
고급 시스템 프로그래밍고급 시스템 프로그래밍
고급 시스템 프로그래밍junghee yu
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체유석 남
 
2015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌32015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌3ssuseraf62e91
 
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5현웅 김
 

Similar to 10장 문자열 클래스와 파일 클래스 (20)

Java advancd ed10
Java advancd ed10Java advancd ed10
Java advancd ed10
 
14. fiile io
14. fiile io14. fiile io
14. fiile io
 
6 function
6 function6 function
6 function
 
강의자료4
강의자료4강의자료4
강의자료4
 
09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)09장 객체와 클래스 (고급)
09장 객체와 클래스 (고급)
 
Nodejs_chapter3
Nodejs_chapter3Nodejs_chapter3
Nodejs_chapter3
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 
Learning Node Book, Chapter 5
Learning Node Book, Chapter 5Learning Node Book, Chapter 5
Learning Node Book, Chapter 5
 
06장 함수
06장 함수06장 함수
06장 함수
 
Apache avro
Apache avroApache avro
Apache avro
 
C review
C  reviewC  review
C review
 
Perl Script Document
Perl Script DocumentPerl Script Document
Perl Script Document
 
고급 시스템 프로그래밍
고급 시스템 프로그래밍고급 시스템 프로그래밍
고급 시스템 프로그래밍
 
고급 시스템 프로그래밍
고급 시스템 프로그래밍고급 시스템 프로그래밍
고급 시스템 프로그래밍
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체
 
JSON with C++ & C#
JSON with C++ & C#JSON with C++ & C#
JSON with C++ & C#
 
2015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌32015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌3
 
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
 

More from 유석 남

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications유석 남
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java유석 남
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿유석 남
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩유석 남
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)유석 남
 
11장 상속
11장 상속11장 상속
11장 상속유석 남
 
08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)유석 남
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용유석 남
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스유석 남
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료유석 남
 

More from 유석 남 (11)

02장 Introduction to Java Applications
02장 Introduction to Java Applications02장 Introduction to Java Applications
02장 Introduction to Java Applications
 
01장 Introduction to Computers and Java
01장 Introduction to Computers and Java01장 Introduction to Computers and Java
01장 Introduction to Computers and Java
 
14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿14장 - 15장 예외처리, 템플릿
14장 - 15장 예외처리, 템플릿
 
13장 연산자 오버로딩
13장 연산자 오버로딩13장 연산자 오버로딩
13장 연산자 오버로딩
 
12장 상속 (고급)
12장 상속 (고급)12장 상속 (고급)
12장 상속 (고급)
 
11장 상속
11장 상속11장 상속
11장 상속
 
08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용
 
03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스03장 조건문, 반복문, 네임스페이스
03장 조건문, 반복문, 네임스페이스
 
[20140624]소개자료
[20140624]소개자료[20140624]소개자료
[20140624]소개자료
 
Example
ExampleExample
Example
 

10장 문자열 클래스와 파일 클래스

  • 1. 10장 문자열 클래스와 파일 클래스
  • 2. 차례 문자열 객체 생성 파일 객체 생성 출력형식 지정자 fstream 클래스 이진 파일의 입출력 임의 접근 파일 2/28
  • 3. C++ 라이브러리에서 제공하는 클래스 •자주 사용하는 객체에 대한 클래스에 대해 C++ 라이브러리에서 미리 정의해 놓았다!! •문자열 처리를 담당하는 string 클래스 •파일 처리를 담당하는 fstream 클래스 •클래스 정보를 담은 헤더파일을 포함하고 사용해야 함 3/28
  • 4. string •string •문자열 클래스 •멤버 변수와 멤버 함수가 이미 정의되어 있음 •문자열 객체 생성하기 string s_name; //객체 s_name 이 생성 string s_name(“김갑순”); //객체 s_name 을 생성하면서 문자열을 매개변수로 하는 생성자 호출 string s_name=“김갑순”; 4/28
  • 5. #include <iostream> #include <string> //문자열 클래스 사용을 위해 포함 using namespace std; int main() { string s_name; //스트링 클래스의 객체 생성 s_name="문자열"; //대입문으로 직접 문자열 할당 가능 cout << s_name << endl; cout <<"문자열 길이 : " << s_name.length() << endl; s_name=s_name+"클래스"; //문자열 연산자 사용 가능 //s_name.append("클래스"); cout << s_name << endl; cout <<"문자열 길이 : " << s_name.length() << endl; return 0; } 5/28 문자열 클래스 예제
  • 6. 문자열 클래스 생성자 •생성자 함수 형태 의미와 예 string ( ) 빈 문자열 객체를 생성 string str1; string (문자열객체) 객체를 생성하고 생성자에 문자열 객체를 전달 string name(str1); //str1은 이미 생성된 문자열 객체 string (char *) 객체를 생성하고 생성자에 문자열을 전달 char s[10]=“Computer”; string str2(s); string (개수, 문자) 객체를 생성하고 개수와 문자를 전달, 문자를 해당 개수만큼 갖는 문자열 객체 생성 string str3(5, ‘A’); 6/28
  • 7. 문자열 클래스 append 함수 •문자열 추가 함수 함수 형태 의미와 예 append(문자열) 객체에 전달한 매개변수인 문자열을 덧붙인다. string newStr=“Computer”; newStr.append(“Science”); //”ComputerScience” append(문자열, 시작위치, 개수) 객체에 전달한 문자열에서 시작위치에서 개수만큼의 문자열을 덧붙인다. string newStr; newStr.append(“ComputerScience”, 0, 8); “Computer” append(개수, 문자) 객체에 지정한 개수만큼 해당 문자를 덧붙인다. string newStr=“Computer”; newStr.append(3, ‘!’); //”Computer!!!” 7/28
  • 8. 문자열 클래스 assign 함수 •문자열 추가 함수 함수 형태 의미와 예 assign(문자열) 객체에 전달한 매개변수인 문자열로 초기화된다. string newStr=“Computer”; newStr.assign(“Science”); //”Science” assign(문자열, 시작위치, 개수) assign(문자열, 개수) 객체에 전달한 문자열에서 시작위치에서 개수만큼의 문자열로 초기화된다. string newStr; newStr.assign(“ComputerScience”, 8, 7); //“Science” newStr.assign(“ComputerScience”, 8); //“Computer” assign(개수, 문자) 객체에 지정한 개수만큼 해당 문자를 덧붙인다. string newStr=“Computer”; newStr.assign(3, ‘!’); //”!!!” 8/28
  • 9. 문자열 멤버 함수 : at(), length(), size(), clear(), erase() 함수 형태 의미와 예 at(위치) 문자열 객체에서 지정한 위치의 문자를 반환한다. 문자 위치는 0부터 시작한다. string newStr=“Computer”; char rChar=newStr.at(0); //’C’ length(), size() 문자열 객체에 저장한 문자열 길이를 반환한다. string newStr=“Programming”; int LenString=newStr.length(); //11 clear(), erase(위치, 개수) clear() : 객체를 빈 문자열로 초기화 erase(위치, 개수) : 지정된 위치부터 해당 개수만큼 문자를 삭제함 string newStr=“Computer”; newStr.erase(6,2); //”Comput” newStr.clear(); //문자열이 모두 삭제됨 9/28
  • 10. 문자열 멤버 함수 : empty(), substr(), swap() 함수 형태 의미와 예 empty() 문자열 객체가 아무 내용도 저장하고 있지 않으면 true, 아니면 false를 반환한다. string newStr=“Computer”; newStr.empty(); // true 반환 substr(위치, 개수) 문자열 객체의 지정한 위치에서 해당 개수만큼의 문자로 이루어진 문자열을 반환한다. string newStr="ComputerScience"; newStr.substr(0, 8); //0번째부터 8번째까지의 문자 모음인 "Computer"가 반환됨 swap(문자열) 전달받은 매개변수인 문자열 객체로 교환한다. string newStr1 ("Computer), newStr2("Science"); newStr1.swap(newStr2); //newStr1과 newStr2의 값이 서로 교환된다. 10/28
  • 11. 문자열 멤버 함수 : find(), replace() 함수 형태 의미와 예 find(문자) find(문자, 시작위치) 문자열 객체에서 지정한 문자를 0번째 부터 찾아서 그 위치를 반환 string newStr="ComputerScience"; newStr.find('e'); //문자는 0번째부터 위치를 표시, 따라서 6을 반환함 newStr.find('e', 8); //8번째 이후 문자 'e'는 11번째에 있으므로 11을 반환함 find(문자열) find(문자,열 시작위치) 문자열 객체에서 지정한 문자열을 0번째부터 찾아서 그 위치를 반환 string newStr="Test1Test2Test3Test4", newStr2="Test"; newStr.find(newStr2); //0번째부터 문자열 newStr2를 찾아서 0을 반환 newStr.find(newStr2, 5); //5번째 위치부터 문자열 newStr2의 위치를 찾아서 반환함 swap(문자열) 문자열 객체의 해당 위치에서 매개변수로 전달한 문자열로 개수만큼의 문자로 변경 string newStr1 ("Computer), newStr2("Science"); newStr1.replace(0, 2, newStr2) // newStr1이 "Scmputer"로 변경 11/28
  • 12. 문자열 멤버 함수 : compare(), insert() 함수 형태 의미와 예 compare(문자열) compare(시작위치, 개수, 문자열) 문자열 객체와 매개변수 문자열 객체와 같은가를 비교한다. 만약 기준 문자열이 크면 1, 매개변수 문자열이 크면 -1, 같으면 0을 반환 string Str1=“Computer”, Str2=“Science”; Str1.compare(Str2); //-1을 반환 insert(시작위치, 문자열) insert(시작위치, 개수, 문자) 문자열 객체에서 지정한 문자열을 지정한 위치에 삽입해서 반환한다. string str1="AAAA", str2="BBBB"; str1.insert(0, str2); // str1이 "BBBBAAAA"으로 갱신됨 str1.insert(4, 3, 'C'); //str1이 'C'를 세 개 삽입해서 "BBBBCCCAAAA"으로 갱신됨 12/28
  • 13. 문자열 클래스 연산자 •문자열 클래스는 연산자를 이용해서 •문자열 대입, 추가, 비교 등을 실행한다. 연산자 설명 비고 [ ] 배열 첨자로 문자를 참조 문자열 클래스에 연산자 오버로딩이 정의되어 가능한 것임 (13장 연산자 오버로딩) = 한 문자열의 내용을 문자열 객체에 대입, assign() 함수를 대신함 + 문자열과 문자열을 결합하여 하나의 문자열로 완성, append() 함수를 대신함 += 하나의 문자열을 다른 문자열에 추가 << 문자열을 스트림으로 삽입 >> 스트림 으로부터 문자열 추가 ==, !=, < 문자열 간의 논리 연산 수행 <=, >, >= 문자열 간의 관계 연산 수행 13/28
  • 14. 파일 출력 객체 •파일 출력 객체 –#include <fstream> –출력 내용을 파일 객체로 전달하면 됨!!! –출력 객체 생성  파일 열기(open())  출력 –파일 사용을 마치고 파일 닫기(close()) ofstream 파일출력객체; 파일출력객체.open(“출력파일이름”); 파일출력객체 << 출력 내용; 파일출력객체.close(); 14/28
  • 15. 표준 출력 코드와 파일 출력 코드 비교 프로그램 실행 결과 예제1 #include <iostream> using namespace std; int main( ) { cout << "즐거운 프로그래밍!!!" << endl; return 0; } //모니터 즐거운 프로그래밍 예제2 #include <iostream> #include <fstream> using namespace std; int main( ) { ofstream output; output.open("test.txt"); output << "즐거운 프로그래밍!!! " << endl; output.close( ); return 0; } //파일 15/28
  • 16. 파일 입력 객체 •파일 입력 객체 –#include <fstream> –입력 내용을 파일 객체에서 입력받음!!! –입력 객체 생성  파일 열기(open())  입력 –파일 사용을 마치고 파일 닫기(close()) ifstream 파일출력객체; 파일입력객체.open(“입력파일이름”); 파일입력객체 >> 입력 내용저장변수; 파일입력객체.close(); 16/28
  • 17. 표준 입력 코드와 파일 입력 코드 비교 프로그램 실행 결과 예제1 int main( ) { char message[80]; cin >> message; cout << message << endl; return 0; } 프로그래밍 키보드로입력 프로그래밍  화면에 출력 예제2 #include <iostream> #include <fstream> using namespace std; int main( ) { ifstream input; char message[80]; input.open("test.txt"); input >> message; cout << message << endl; input.close( ); return 0; } 즐거운프로그래밍!!! 17/28
  • 18. 파일 존재 여부 확인 멤버 함수 •fail() –true : 파일 열기로 인해 파일 객체가 가리키는 파일이 없음을 의미 –false : 파일 열기로 인해 파일 객체가 가리키는 파일이 있음을 의미 18/28
  • 19. 파일의 마지막 위치 확인 멤버 함수 •eof() –true : 파일 포인터가 파일 마지막에 위치함 –fail : 파일 포인터가 파일 마지막이 아님을 의미함 19/28
  • 20. 파일 읽기/ 파일로 출력하기 20/28
  • 21. 출력형식 지정자 •출력형식 지정자 –#include <iomanip> –setw(폭) : 출력 폭을 결정 –setprecision(유효자릿수) : 소수점 이하 자릿수 –fixed : 실수형을 본래 형태로 출력 –showpoint : 소수점 출력 21/28
  • 22. fstream 클래스 •fstream 클래스 = ofstream + ifstream •파일 객체 생성 후 open() 함수에서 파일 모드를 정할 수 있음 파일모드 설명 예 ios::in 파일에서 읽어오기 파일객체.open(파일이름, ios::in); ios::out 파일에 출력하기 파일객체.open(파일이름, ios::out); ios::app 파일에 추가하여 출력하기 파일객체.open(파일이름, ios::app); ios::trunc 파일이 이미 존재하는 경우 삭제하고 새로운 파일로 생성하여 출력 파일객체.open(파일이름, ios::trunc); ios::binary 이진 파일로 처리하기 파일객체.open(파일이름, ios::in | ios::binary); 파일객체.open(파일이름, ios::out | ios::binary); 22/28
  • 23. fstream 클래스 예시 #include <iostream> #include <fstream> #include <string> using namespace std; int main() { fstream fs; fs.open("test.txt", ios::out); if (fs.fail()) return 0; fs << "keyboard" << endl; fs << "monitor" << endl; fs.close(); fs.open("test.txt", ios::app); fs << "desk" << endl; fs.close(); fs.open("test.txt", ios::in); string temp; while (fs >> temp, !fs.eof()) { cout << temp << endl; } fs.close(); return 0; } 23/28
  • 24. 이진 파일 입출력 •이진 파일은 바이트 단위로 입출력 –파일에 출력 함수 –파일에서 입력 함수 fstream 객체이름.write(char *, 바이트수); fstream 객체이름.read(char *, 바이트수); 24/28
  • 25. 이진 파일 입출력 예시1 #include <iostream> #include <fstream> using namespace std; int main() { fstream fp; int score[5]={78, 96, 100, 25, 96}; fp.open ("sample.txt", ios::out | ios::binary); //출력 이진파일 설정 fp.write((char*)score, 20); //score 위치에서 20바이트 출력 fp.close(); return 0; } 25/28
  • 26. 이진 파일 입출력 예시2 #include <iostream> #include <iomanip> #include <fstream> using namespace std; int main() { fstream fp; int score; fp.open ("sample.txt", ios::in | ios::binary); //입력-이진파일 if (fp.fail()) //파일열기 실패하면 프로그램 종료 return 1; while (fp.read((char*)&score, 4), !fp.eof()) cout << setw(3) << right << score<< endl; fp.close(); return 0; } 26/28
  • 27. 임의 접근 파일 •이진 파일의 경우 파일 포인터 위치를 임의로 이동할 수 있음 –seekp(), seekg() –이동기준 멤버함수 설명 seekp(바이트, 이동기준) 파일에 출력할 때 파일 포인터를 지정한 만큼 이동 seekg(바이트, 이동기준) 파일에 입력할 때 파일 포인터를 지정한 만큼 이동 이동기준 설명 ios::beg 파일의 처음 시작위치부터 지정한 바이트 만큼 이동 ios::end 파일의 마지막 위치에서 지정한 바이트 만큼 역으로 이동 ios::cur 현재 이치부터 지정한 바이트 만큼 이동 27/28
  • 28. 임의 접근 파일 예시 #include <iostream> #include <iomanip> #include <fstream> using namespace std; int main() { fstream fp; int score; fp.open ("sample.txt", ios::in | ios::binary); if (fp.fail()) return 1; fp.read((char *) &score, 4); cout << setw(3) << right << score<< endl; fp.seekg(4, ios::cur); fp.read((char *) &score, 4); cout << setw(3) << right << score<< endl; fp.close(); return 0; } 28/28