728x90

황기태 저자의 명품 C++ Programming 개정판을 읽고 학습한 내용을 정리한 포스트입니다!

https://search.shopping.naver.com/book/catalog/32436115747

 

C++ Programming : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

 

C++ 응용프로그램에서 가장 많이 다뤄지는 데이터 중 하나가 문자열이지만, 사실 문자열은 C++의 기본 데이터 타입이 아니다. 따라서 아래 2가지 방법으로 표현할 수 있다.

 

  • C-스트링 : C언어에서 문자열을 표현하는 방법
  • string 클래스 - 문자열을 객체로 다루는 방법 (권장)

C-스트링

  • C-스트링은 널 문자로 끝나는 char 배열을 말하며 c언어에서 사용하는 방식
char name[6] = {'G', 'r', 'a', 'c', 'e' '\0'};	// name 문자열은 "Grace"
char name2[5] = {'G', 'r', 'a', 'c', 'e'};	// 문자열이 아닌 단순 문자 배열

 

  •  배열의 공간이 문자수보다 크다면 '\n'으로 초기화된다.
  • <cstring> 또는 <string.h> 헤더 파일을 include하여 c에서 사용한 strcpy(), strcmp() 등을 그대로 사용 가능
  • cstring은 내부적으로 string.h를 include 하지만, C++ 표준에 따라 <cstring>을 include 하는 것이 바람직

 

cin을 이용한 문자열 입력
char name[6];	// 5개의 문자로 구성된 문자열을 저장할 수 있는 char 배열
cin >> name;	// 키보드에서 문자열을 읽어 name 배열에 저장
  • 주의할 점
    • 한글 => 한 문자가 2바이트 이므로 name 배열의 경우 3글자까지 저장 가능
    • >> 연산자를 사용하면 공백 문자 없이 입력해야 된다.
    • 공백 문자를 만나면 이전에 입력된 문자들을 하나의 문자열로 인식하기 때문..!

 

cin.getline()을 이용
  • cin 객체의 getline() 멤버 함수를 이용하면 공백이 포함된 문자열 입력이 가능
cin.getline(char buf[], int size, char delimitChar)
// buf: 키보드로부터 읽은 문자열을 저장할 배열
// size: buf[] 배열의 크기
// delimitChar: 문자열 입력 끝을 지정하는 구분 문자
  • 최대 size-1개의 문자을 입력받거나 delimitChar로 지정된 문자를 만나면 문자열의 입력이 종료
  • 입력된 문자열은 buf에 저장, delimitChar로 지정된 문자는 저장 xxx, cin 버퍼에서도 사라짐
char address[100];
cin.getline(address, 100, '\n');	// 엔터키가 입력될 때까지 최대 99개의 문자 입력
  			// '\n'은 디폴트

 


string 클래스

  • C-스트링은 배열의 크기에 문자열의 크기가 고정되는 불편함
  • 표준 라이브러리인 string 클래스는 문자열의 크기가 가변적
  • 다른 언어에서도 유사하게 문자열을 다루기 때문에 권장
#include <iostream>	// cout, endl
#include <string>	// string 클래스
using namespace std;

int main(){
    string song("Fallig in love");
    stirng elvis("Elvis Presley");
    string singer;
    
    cout << song + "를 부른 가수는? "; 	// + 로 문자열 연결
    cout << "힌트: 첫 글자는 " << elvis[0] << endl;	// [] 연산자 사용
    
    getline(cin, singer);	// 문자열 입력
    				// getline()은 string 타입의 c++ 문자열을 입력 받기 위해 제공되는 "전역 함수"
                   
    if(singer == elvis)	// 문자열 비교 (== 연산자 오버로딩)
    	cout << "Yes" << endl;
    else
    	cout << "No" << endl;

 


#include <iostream>과 전처리기

  • C/C++ 컴파일러는 컴파일 전에 우선 전처리기(preprocessor)를 실행시켜 #include를 처리한다.
  • 전처리기는 컴파일러에 의해 내부적 호출
  • #include <헤더 파일>의 텍스트를 #include가 있던 그 자리에 삽입한다. => 헤더 파일의 확장이라고 함
    • 만약, <헤더 파일> 내에 또 다른 include 내포 => 그 자리에서 헤더 파일의 확장이 또 일어남.
  • 위의 예시와 같이 iostream이 istream, ostream을 include 하고 모든 확장이 끝날 때까지 반복.
특징
  • 표준 라이브러리 헤더 파일은 텍스트 파일로서 컴파일러가 설치된 폴더의 include에 존재
  • c++ 표준은 헤더에 확장자를 붙이지 xxx
  • #include <헤더 파일>은 컴파일러가 설치된 폴더에서 찾으라는 지시
  • #include "헤더 파일"은 개발자 자신이 만든 헤더 파일을 사용하는 경우 프로젝트 폴더나 컴파일 옵션으로 지정한 곳에서 찾도록 지시

헤더 파일에는 뭐가 들어있는지?

  • <cstring> 헤더를 예로 들겠다.
  • <cstring> 헤더 파일에는 strcpy() 함수의 선언(원형)만 들어있으며, 컴파일 할 때 strcpy() 함수의 호출이 정확한지 판단하는데 사용된다.
  • strcpy() 함수의 코드는 이미 컴파일된 기계어 형태로 c 라이브러리(Object)에 들어있다. 실행 중에 strcpy()가 호출되면 c 라이브러리의 코드를 호출하지 <cstring> 헤더 파일에 있는 무언가를 호출하는 것이 아니다.
728x90

'Programming Language > C++' 카테고리의 다른 글

[C++] 생성자  (1) 2023.11.27
[C++] 클래스와 객체  (1) 2023.11.27
[C++] C++ 프로그래밍 기본  (1) 2023.11.27
[C++] 특징과 객체 지향 프로그래밍  (1) 2023.11.27
[C++] C++ 시작하기  (1) 2023.11.27