C++ 프로그래밍 15 2008년 2학기 전자정보공학대학 컴퓨터공학부.

Slides:



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

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
컴퓨터 개론 및 실습 강의 6 서울대학교 기계항공공학부 담당 : 김 찬 중.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
Power C++ 제6장 포인터와 문자열.
제 9 장 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
제14장 동적 메모리.
제 9 장 구조체와 공용체.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
개정판 누구나 즐기는 C언어 콘서트 제9장 포인터 출처: pixabay.
5장 배열 작성자 : 변재현.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
5장. 참조 타입.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제 3장. C보다 나은 C++ II.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
배열이란? 배열의 선언? - 배열과 포인터의 관계? 문자열이란? 문자배열 연결 리스트
14장. 포인터와 함수에 대한 이해.
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
14. 예외처리.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C#.
13. 연산자 오버로딩.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
10. 문자열클래스와파일클래스.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
8주차: Strings, Arrays and Pointers
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
12. 상속 : 고급.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
윈도우에서의 유니코드.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

C++ 프로그래밍 15 2008년 2학기 전자정보공학대학 컴퓨터공학부

Outline Review: 동적 메모리 할당 문자열

Review: 동적 메모리 할당과 해제 동적 메모리 할당을 사용하는 방법의 정리 포인터 선언. int * arr; 메모리를 할당할 때는 타입과 크기를 지정. 컴퓨터가 메모리를 할당한 후에 그 메모리의 주소를 리턴한다. arr = new int[size]; 주소를 통해서 메모리 공간을 사용. 이 때는 배열의 원소를 가리키는 포인터처럼 사용할 수 있다. arr[0]; 사용이 끝난 후에는 반드시 보관해 둔 주소를 알려주면서 메모리를 해제. delete [] arr;

Review: 동적 메모리 할당의 규칙 new, delete와 new[], delete[] 쌍을 맞춰서 사용하자. 해제한 메모리를 또 해제해서는 안 된다. int * p; p = new int; // 메모리 1개 할당 delete p; // 메모리 1개 해제 p = new int [100]; // 메모리 100개 할당 delete [] p; // 메모리 100개 해제 short* p = new short [100]; // 메모리를 할당한다. delete[] p; // 메모리를 해제한다. delete[] p; // 메모리를 해제한다. Error!

Review: 동적 메모리 할당의 규칙 NULL 포인터를 해제하는 것은 안전하다 char* p = NULL; delete p; // 혹은 delete[] p char* p = NULL; p = char [100]; delete [] p; p = NULL;

문자열

C 스타일과 C++ 스타일의 문자열 C 언어: 문자열 처리 함수를 사용해서 문자열을 처리 C++: 문자열 클래스를 사용

문자열의 길이와 복사 (C style) #include <iostream> #include <cstring> using namespace std; int main() { char src[] = “Sejong University"; int len = strlen(src); // 1. 길이를 잰다 char* dest = new char [len + 1]; // 2. 메모리 할당 strcpy(dest, src); // 3. 문자열 복사 cout << "src = " << src << "\n"; cout << "dest = " << dest << "\n"; delete[] dest; return 0; }

strlen() strlen() 함수를 사용해서 문자열의 길이를 잴 수 있다. [17-4]

strcpy() strcpy() 함수를 사용해서 문자열의 내용을 복사할 수 있다. [17-6] [17-7]

문자열의 결합과 비교 (C style) #include <iostream> #include <cstring> using namespace std; int main() { char str1[20] = "abcde"; char str2[] = "fghij"; strcat(str1, str2); cout<<“str1=“<<str1<<“\n”; if ( strcmp( str1, "abcdefghij") == 0) cout << "str1 and \"abcdefghij\" are identical.\n"; if ( strcmp( "123456", str1) != 0) cout << "\"123456\" and str1 are NOT identical.\n"; return0; }

strcat() strcat() 함수를 사용해서 문자열을 결합할 수 있다. [17-9] [17-10]

strcmp() strcmp() 함수를 사용해서 문자열의 내용을 비교할 수 있다. [17-11] [17-12]

문자열에 대한 정리 문자열은 정보의 한 종류고, 문자열을 저장하기 위해서는 배열을 사용하거나 동적으로 메모리를 할당(포인터사용)할 필요가 있다. C++에서는 문자열의 첫번째 바이트의 주소를 사용해서, 전체 문자열을 지칭한다. 대부분의 경우에 char* 타입의 변수는 문자열을 가리킨다고 생각해도 된다. // p: 문자열을 넣어야 한다. void Function( char* p );

char * 의 의미 #include <iostream> using namespace std; int main() { char c = ‘A’; char s[] = “This is a string”; cout << s <<“\n”; // s의 주소 cout << &s[0] <<“\n”; // s[0]의 주소 cout << c <<“\n”; // c의 값 cout << &c <<“\n”; // c의 주소 return 0; }

C++ 스타일의 문자열 생성 C++ 스타일의 문자열 변수를 생성하는 예 #include <iostream> #include <string> using namespace std; int main() { string s = "C++ Style~"; cout << s << "\n"; return 0; } [17-21]

C++ 스타일의 문자열 생성 string 객체 사용 실행 결과

문자열의 복사 (C++ Style) 대입 연산자(=) 사용 #include <iostream> #include <string> using namespace std; int main() { string src = “Sejong University"; string desc; desc = src; // 문자열 복사 cout << "src = " << src << "\n"; cout << "desc = " << desc << "\n"; return 0; }

문자열의 길이 (C++ Style) string 객체의 맴버함수 size() 사용 #include <iostream> #include <string> using namespace std; int main() { string s1; string s2 = "123"; string s3 = "abcdefg"; cout << "s1 = " << s1.size() << "\n"; cout << "s2 = " << s2.size() << "\n"; cout << "s3 = " << s3.size() << "\n"; return 0; }

문자열의 결합과 비교(1) #include <iostream> #include <string> using namespace std; int main() { string str1 = "abcde"; string str2 = "fghij"; str1 = str1 + str2; if ( str1 == "abcdefghij“ ) cout << "str1 and \"abcdefghij\" are identical.\n"; if ( "123456" != str1 ) cout << "\"123456\" and str1 are NOT identical.\n"; return 0; }

문자열의 결합과 비교(2) 문자열 결합: + 연산자 사용 문자열 비교: ==, != 연산자 사용 [17-26] [17-27]

문자열의 검색 string 객체의 맴버함수 find( ) 사용 #include <iostream> #include <string> using namespace std; int main() { string text = "Napster's pay-to-play service is officially out, " "and we have a review of the now-legit Napster. " "We also size up its companion music player from Samsung."; cout<< text <<“\n”; cout << "Offset of 'official' = " << text.find( "official" ) << "\n"; }

문자열의 일부분 얻기(1) string 객체의 맴버함수 substr( ) 사용 #include <iostream> #include <string> using namespace std; int main() { string path = "c:\\My Document\\Pictures\\33.jpg"; int len = path.size(); string ext = path.substr( len - 3, 3); cout << "extention = " << ext << "\n"; return 0; }

문자열의 일부분 얻기(2) substr() 함수: substr(시작위치, 길이) [17-31]

C 스타일에서 C++ 스타일로의 변환 대입 연산자 사용 char cstyle[] = "Are you a string, too?"; string cppstyle; cppstyle = cstyle; // 변환한다 cppstyle[0] = 'B'; cout << "cstyle = " << cstyle << "\n"; cout << "cppstyle = " << cppstyle << "\n“;

C++ 스타일에서 C 스타일로의 변환(1) String에서 C 스타일의 문자열 주소 얻기: c_str() 맴버함수 사용 c_str() 함수를 통해서 얻은 문자열의 주소는 상수형인 const char* 타입. 따라서, 이 문자열의 내용을 변경하는 것은 불가능. string cppstyle = "Yes, I am."; const char* cstyle = NULL; cstyle = cppstyle.c_str(); cout << "cstyle = " << cstyle << "\n"; cout << "cppstyle = " << cppstyle << "\n";

C++ 스타일에서 C 스타일로의 변환(2) c의 함수 strcpy사용하여 복사 string cppstyle = "Yes, I am."; char* cstyle = new char [ cppstyle.size() + 1]; strcpy( cstyle, cppstyle.c_str() ); cstyle[0] = 'Z'; cout << "cstyle = " << cstyle << "\n"; cout << "cppstyle = " << cppstyle << "\n"; delete[] cstyle;

간단한 문자열의 입력(1) 간단하게 문자열을 입력 받는 예 (문제를 가지고 있다) char cs[20]; // C 스타일 간단하게 문자열을 입력 받는 예 (문제를 가지고 있다) char cs[20]; // C 스타일 string cpps; // C++ 스타일 // 문자열을 입력받는다. cin >> cs; cin >> cpps; cout << "cs = " << cs << "\n"; cout << "cpps = " << cpps << "\n";

간단한 문자열의 입력(2) 앞의 예제의 문제점 준비된 메모리보다 큰 문자열이 입력된 경우 공백을 포함한 문자열

getline() 을 사용한 문자열의 입력(1) char cs[20]; // C 스타일 string cpps; // C++ 스타일 cin.getline(cs, 20); getline(cin, cpps); cout << "cs = " << cs << "\n"; cout << "cpps = " << cpps << "\n"; [17-45]

getline() 을 사용한 문자열의 입력(2) getline() 함수를 C++ 스타일의 문자열과 함께 사용하는 방법 getline() 함수를 C 스타일의 문자열과 함께 사용하는 방법 [17-42] [17-43]

연습 파일의 경로를 입력 받아 디렉터리 부분만 출력 Input: d:\My Library\Temp\Test.jpg Output: d:\My Library\Temp\