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

Slides:



Advertisements
Similar presentations
National University 1 / 17 컴퓨터 개론 및 실습 강의 6.
Advertisements

CH1 개발 효율이 높은 프로그램 구조
순천향대학교 정보보호연구회 김 홍 기 포인터와 문자열 순천향대학교 정보보호연구회 김 홍 기
Basic of Buffer Over Flow
명품 C++ 8장 상속.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
C++ Espresso 제2장 제어문과 함수.
실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
8. 객체와 클래스 (기본).
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
C++ Espresso 제9장 다형성.
10장 템플릿과 표준 템플릿 라이브러리(STL)
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
명품 C++ 8장 상속.
C++ Espresso 제6장 생성자와 소멸자.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
25장. 메모리 관리와 동적 할당.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
명품 C++ 7장 프렌드와 연산자 중복.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
21장. 문자와 문자열 처리 함수.
C ++ 프로그래밍 시작.
Chapter 1 C++ 기초 Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
C++ Programming: chapter 7 – inheritence
Chapter 11 Strings.
프로그래밍2 및 실습 C언어 기반의 C++ 2.
배열이란? 배열의 선언? - 배열과 포인터의 관계? 문자열이란? 문자배열 연결 리스트
스택(Stack) 김진수
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
가상함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Chapter 12. String 클래스의 디자인
루프와 카운트 Looping and counting
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
C-언어와 기반구조 정보보호학과 이정수 교수.
5. 논리적 자료표현 : 구조체.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
C언어 (8) 정명희.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
C++ Espresso 제13장 입출력과 파일처리.
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
Ch16_표준 템플릿 라이브러리.
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
10장 템플릿과 표준 템플릿 라이브러리(STL)
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
윈도우에서의 유니코드.
배열.
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 <string> #include <iostream> #include <string> using namespace std; int main() { string s = "C++ Style~"; cout << s << "\n"; return 0; } [17-21] [17-20]

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

문자열의 길이 C++ 스타일의 문자열의 길이를 구하는 예 실행 결과 string s1; string s2 = "123"; #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.451 참조 getline(cin, cpps); cout << "cs = " << cs << "\n"; cout << "cpps = " << cpps << "\n"; [17-45]

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