17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.

Slides:



Advertisements
Similar presentations
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
Advertisements

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
컴퓨터 개론 및 실습 강의 6 서울대학교 기계항공공학부 담당 : 김 찬 중.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제14장 동적 메모리.
제 9 장 구조체와 공용체.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
5장 배열 작성자 : 변재현.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
1. C++ 시작하기.
Heesang kim PL/SQL 3 Heesang kim.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
C++ Espresso 제12장 템플릿.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
배열이란? 배열의 선언? - 배열과 포인터의 관계? 문자열이란? 문자배열 연결 리스트
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
14. 예외처리.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
-Part3- 제2장 문자열 표준 함수와 기타 표준 함수
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
13. 연산자 오버로딩.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
01_ C++ 스타일의 입출력 02_ C 스타일의 입출력
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
10. 문자열클래스와파일클래스.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
8주차: Strings, Arrays and Pointers
12. 상속 : 고급.
Canary value 스택 가드(Stack Guard).
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
윈도우에서의 유니코드.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용

C 스타일과 C++ 스타일의 문자열 C 언어에서 물려받은 문자열 처리 함수를 사용해서 문자열을 처리하는 방법과, C++ 에서 새로 생긴 문자열 클래스를 사용하는 방법이 있다. C++ 스타일이 보다 개선된 방법이지만 기존에 만들어진 많은 소스 코드에서 C 스타일을 사용하고 있기 때문에 두 가지 스타일을 배워야 한다.

문자열의 길이와 복사 C 스타일의 함수를 사용해서 문자열을 복사하는 예 실행 결과 #include <cstring> using namespace std; // 중간 생략 char src[] = "Hanbit-Media"; 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; [17-3]

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

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

문자열의 비교와 결함 C 스타일의 함수를 사용해서 문자열을 결합하고 비교하는 예 실행 결과 #include <cstring> using namespace std; // 중간 생략 char str1[20] = "abcde"; char str2[] = "fghij"; strcat(str1, str2); 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"; [17-8]

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

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

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

문자열 리터럴(Literals) 다시 보기 문자열 리터럴은 문자열의 시작 주소로 해석된다. char* p = “abcde”; [17-18]

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

문자열의 복사 C++ 스타일의 문자열을 복사하는 예 실행 결과 #include <string> using namespace std; // 중간 생략 string src = "Hanbit-Media"; string desc; // 문자열의 내용을 복사한다. desc = src; cout << "src = " << src << "\n"; cout << "desc = " << desc << "\n"; [17-22]

문자열의 길이 C++ 스타일의 문자열의 길이를 구하는 예 실행 결과 #include <string> using namespace std; // 중간 생략 string s1; string s2 = "123"; string s3 = "abcdefg"; cout << "s1 = " << s1.size() << "\n"; cout << "s2 = " << s2.size() << "\n"; cout << "s3 = " << s3.size() << "\n"; [17-23]

문자열의 결합과 비교(1) C++ 스타일의 문자열을 결합하고 비교하는 예 실행 결과 #include <string> using namespace std; // 중간 생략 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"; [17-25]

문자열의 결합과 비교(2) + 연산자를 사용해서 두 문자열을 결합할 수 있다. ==와 != 연산자를 사용해서 두 문자열을 비교할 수 있다. [17-26] [17-27]

문자열의 검색 문자열 내에서 원하는 문자열을 찾아내는 예 실행 결과 #include <string> using namespace std; // 중간 생략 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."; // 이 문자열 안에서 'official' 이라는 단어의 위치를 찾는다. cout << "Offset of 'official' = " << text.find( "official" ) << "\n"; [17-29] [17-28]

문자열의 일부분 얻기(1) 전체 경로에서 확장자 부분만 얻는 예 실행 결과 #include <string> using namespace std; // 중간 생략 string path = "c:\\My Document\\Pictures\\33.jpg"; int len = path.size(); string ext = path.substr( len - 3, 3); // 맨 뒤쪽의 3 문자만 얻어온다. cout << "extention = " << ext << "\n"; [17-28]

문자열의 일부분 얻기(2) substr() 함수를 사용하는 방법 [17-31]

C 스타일에서 C++ 스타일로의 변환 C 스타일의 문자열을 C++ 스타일의 문자열로 변환하는 예 실행 결과 char cstyle[] = "Are you a string, too?"; string cppstyle; // 변환한다. cppstyle = cstyle; // cppstyle의 첫번째 글자를 바꿔본다. cppstyle[0] = 'B'; cout << "cstyle = " << cstyle << "\n"; cout << "cppstyle = " << cppstyle << "\n" [17-34]

C++ 스타일에서 C 스타일로의 변환(1) C++ 스타일의 문자열에서 C 스타일의 문자열 주소를 얻는 예 실행 결과 c_str() 함수를 통해서 얻은 문자열의 주소는 const char* 타입이기 때문에, 이 문자열의 내용을 변경하는 것은 불가능하다. string cppstyle = "Yes, I am."; const char* cstyle = NULL; // C 스타일 문자열을 얻는다. cstyle = cppstyle.c_str(); cout << "cstyle = " << cstyle << "\n"; cout << "cppstyle = " << cppstyle << "\n"; [17-35]

C++ 스타일에서 C 스타일로의 변환(2) C++ 스타일의 문자열에서 C 스타일의 문자열로 변환하는 예 실행 결과 string cppstyle = "Yes, I am."; char* cstyle = new char [ cppstyle.size() + 1]; strcpy( cstyle, cppstyle.c_str() ); // cstyle의 첫번째 문자를 바꿔본다. cstyle[0] = 'Z'; cout << "cstyle = " << cstyle << "\n"; cout << "cppstyle = " << cppstyle << "\n"; delete[] cstyle; [17-37]

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

간단한 문자열의 입력(2) 앞의 예제는 다음의 문제점을 가지고 있다. 준비된 메모리보다 큰 문자열이 입력된 경우 잘못된 메모리 영역을 침범할 수 있다. 공백을 포함한 문자열을 입력받을 수 없다. [17-39] [17-40]

getline() 을 사용한 문자열의 입력(1) 실행 결과 char cs[20]; // C 스타일 string cpps; // C++ 스타일 // 문자열을 입력받는다. cin.getline(cs, 20); cin.clear(); // clear() 함수의 의미는 p.436 참조 getline(cin, cpps); cout << "cs = " << cs << "\n"; cout << "cpps = " << cpps << "\n"; [17-45]

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