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

Slides:



Advertisements
Similar presentations
Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++ 프로그래밍 기초 : 객체지향의 시작 C++로 프로그래밍한다는 것의 의미
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제14장 동적 메모리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
조 병 규 Software Quality Lab. 한국교통대학교
5장 배열 작성자 : 변재현.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
제13장 파일처리 스트림의 개념을 이해한다. 객체 지향적인 방법을 사용하여 파일 입출력을 할 수 있다.
제 3장. C보다 나은 C++ II.
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
C++ Espresso 제12장 템플릿.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
11 표준 입출력과 파일 입출력 데이터를 읽고 쓰는 다양한 방법 익히기!.
프로그래밍 랩 – 7주 리스트.
파일 입출력 12.
14장. 포인터와 함수에 대한 이해.
14. 예외처리.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
11장. 1차원 배열.
C#.
13. 연산자 오버로딩.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
Method & library.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
인터넷응용프로그래밍 JavaScript(Intro).
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
제 1장. C++ 시작하기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
01_ C++ 스타일의 입출력 02_ C 스타일의 입출력
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
CHAP 21. 전화, SMS, 주소록.
12. 상속 : 고급.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
함수, 모듈.
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Chapter 12 파일 입출력.
Chapter 11 구조체.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
13. 포인터와 배열! 함께 이해하기.
7 생성자 함수.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

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

차례 문자열 객체 생성 파일 객체 생성 출력형식 지정자 fstream 클래스 이진 파일의 입출력 임의 접근 파일

C++ 라이브러리에서 제공하는 클래스 자주 사용하는 객체에 대한 클래스에 대해 C++ 라이브러리에서 미리 정의해 놓았다!! 문자열 처리를 담당하는 string 클래스 파일 처리를 담당하는 fstream 클래스 클래스 정보를 담은 헤더파일을 포함하고 사용해야 함

string string 문자열 객체 생성하기 문자열 클래스 멤버 변수와 멤버 함수가 이미 정의되어 있음 string s_name; //객체 s_name 이 생성 string s_name(“김갑순”); //객체 s_name 을 생성하면서 문자열을 매개변수로 하는 생성자 호출 string s_name=“김갑순”;

소스 10-1 (ch10_01.cpp) #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("클래스"); return 0; }

문자열 클래스 생성자 생성자 소스 10-2 (ch10_02.cpp) 함수 형태 의미와 예 string ( ) 빈 문자열 객체를 생성 string str1; string (문자열객체) 객체를 생성하고 생성자에 문자열 객체를 전달 string name(str1); //str1은 이미 생성된 문자열 객체 string (char *) 객체를 생성하고 생성자에 문자열을 전달 char s[10]=“Computer”; string str2(s); string (개수, 문자) 객체를 생성하고 개수와 문자를 전달, 문자를 해당 개수만큼 갖는 문자열 객체 생성 string str3(5, ‘A’);

문자열 클래스 append 함수 문자열 추가 함수 소스 10-3 (ch10_03.cpp) 함수 형태 의미와 예 객체에 전달한 매개변수인 문자열을 덧붙인다. string newStr=“Computer”; newStr.append(“Science”); //”ComputerScience” append(문자열, 시작위치, 개수) 객체에 전달한 문자열에서 시작위치에서 개수만큼의 문자열을 덧붙인다. string newStr; newStr.append(“ComputerScience”, 0, 8); “Computer” append(개수, 문자) 객체에 지정한 개수만큼 해당 문자를 덧붙인다. string newStr=“Computer”; newStr.append(3, ‘!’); //”Computer!!!”

문자열 클래스 assign 함수 문자열 추가 함수 소스 10-4 (ch10_04.cpp) 함수 형태 의미와 예 객체에 전달한 매개변수인 문자열로 초기화된다. 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, ‘!’); //”!!!”

문자열 멤버 함수 : at(), length(), size(), clear(), erase() 소스 10-5 (ch10_05.cpp) 함수 형태 의미와 예 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(); //문자열이 모두 삭제됨

문자열 멤버 함수 : empty(), substr(), swap() 소스 10-6 (ch10_06.cpp) 함수 형태 의미와 예 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의 값이 서로 교환된다.

문자열 멤버 함수 : 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"로 변경 소스 10-7 (ch10_07.cpp)

문자열 멤버 함수 : compare(), insert() 소스 10-8 (ch10_08.cpp) 함수 형태 의미와 예 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"으로 갱신됨

문자열 클래스는 연산자를 이용해서 문자열 대입, 추가, 비교 등을 실행한다. (소스 10-9, ch10_09.cpp) 문자열 클래스 연산자 문자열 클래스는 연산자를 이용해서 문자열 대입, 추가, 비교 등을 실행한다. (소스 10-9, ch10_09.cpp) 연산자 설명 비고 [ ] 배열 첨자로 문자를 참조 문자열 클래스에 연산자 오버로딩이 정의되어 가능한 것임 (13장 연산자 오버로딩) = 한 문자열의 내용을 문자열 객체에 대입, assign() 함수를 대신함 + 문자열과 문자열을 결합하여 하나의 문자열로 완성, append() 함수를 대신함 += 하나의 문자열을 다른 문자열에 추가 << 문자열을 스트림으로 삽입 >> 스트림 으로부터 문자열 추가 ==, !=, < 문자열 간의 논리 연산 수행 <=, >, >= 문자열 간의 관계 연산 수행

파일 출력 객체 파일 출력 객체 #include <fstream> 출력 내용을 파일 객체로 전달하면 됨!!! 출력 객체 생성  파일 열기(open())  출력 파일 사용을 마치고 파일 닫기(close()) ofstream 파일출력객체; 파일출력객체.open(“출력파일이름”); 파일출력객체 << 출력 내용; 파일출력객체.close();

표준 출력 코드와 파일 출력 코드 비교 실행 결과 //파일 프로그램 예제1 //모니터 즐거운 프로그래밍 예제2 #include <iostream> using namespace std;   int main( ) { cout << "즐거운 프로그래밍!!!" << endl; return 0; } //모니터 즐거운 프로그래밍 예제2 #include <fstream> ofstream output; output.open("test.txt"); output << "즐거운 프로그래밍!!! " << endl; output.close( ); //파일

파일 입력 객체 파일 입력 객체 #include <fstream> 입력 내용을 파일 객체에서 입력받음!!! 입력 객체 생성  파일 열기(open())  입력 파일 사용을 마치고 파일 닫기(close()) ifstream 파일출력객체; 파일입력객체.open(“입력파일이름”); 파일입력객체 >> 입력 내용저장변수; 파일입력객체.close();

표준 입력 코드와 파일 입력 코드 비교 실행 결과 즐거운프로그래밍!!! 프로그램 예제1 프로그래밍 키보드로입력 int main( ) { char message[80]; cin >> message; cout << message << endl; return 0; } 프로그래밍 키보드로입력 프로그래밍  화면에 출력 예제2 #include <iostream> #include <fstream> using namespace std;   ifstream input; input.open("test.txt"); input >> message; cout << message << endl; input.close( ); 즐거운프로그래밍!!!

파일 존재 여부 확인 멤버 함수 fail() 소스 10-10 (ch10_10.cpp) true : 파일 열기로 인해 파일 객체가 가리키는 파일이 없음을 의미 false : 파일 열기로 인해 파일 객체가 가리키는 파일이 있음을 의미 소스 10-10 (ch10_10.cpp)

파일의 마지막 위치 확인 멤버 함수 eof() 소스 10_11, 10_12(ch10_11.cpp, ch10_12.cpp) true : 파일 포인터가 파일 마지막에 위치함 fail : 파일 포인터가 파일 마지막이 아님을 의미함 소스 10_11, 10_12(ch10_11.cpp, ch10_12.cpp)

파일 읽기/ 파일로 출력하기

출력형식 지정자 출력형식 지정자 소스 10-13 (ch10_13.cpp) #include <iomanip> setw(폭) : 출력 폭을 결정 setprecision(유효자릿수) : 소수점 이하 자릿수 fixed : 실수형을 본래 형태로 출력 showpoint : 소수점 출력 소스 10-13 (ch10_13.cpp)

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

소스 10-14 (ch10_14.cpp) #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; } return 0;

이진 파일 입출력 이진 파일은 바이트 단위로 입출력 파일에 출력 함수 파일에서 입력 함수 fstream 객체이름.write(char *, 바이트수); fstream 객체이름.read(char *, 바이트수);

소스 10-15 (ch10_15.cpp) #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; }

소스 10-16 (ch10_16.cpp) #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; }

임의 접근 파일 이진 파일의 경우 파일 포인터 위치를 임의로 이동할 수 있음 seekp(), seekg() 이동기준 멤버함수 설명 seekp(바이트, 이동기준) 파일에 출력할 때 파일 포인터를 지정한 만큼 이동 seekg(바이트, 이동기준) 파일에 입력할 때 파일 포인터를 지정한 만큼 이동 이동기준 설명 ios::beg 파일의 처음 시작위치부터 지정한 바이트 만큼 이동 ios::end 파일의 마지막 위치에서 지정한 바이트 만큼 역으로 이동 ios::cur 현재 이치부터 지정한 바이트 만큼 이동

소스 10-17 (ch10_17.cpp) #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.close(); return 0; }