본문 바로가기
ETC

[c++] c++의 문자열

by dkswnkk 2021. 10. 18.

c++ 문자열

c++의 문자열 표현 방식 은 '2'가지

  1. C 스트링 방식 - '\0'로 끝나는 문자 배열
char name1[6]={'G','r','a','c','e','\0'}; //name1은 문자열 "Grace"
char name2[5]={'G','r','a','c','e'}; //name2는 문자열이 아니고 단순 문자 배열

스크린샷 2021-10-17 오전 11 40 46

2.string 클래스 이용

  • 헤더 파일에 선언됨
  • 다양한 멤버 함수 제공, 문자열 비교, 복사, 수정 등

 

c 스트링 방식으로 문자열 다루기

c 스트링으로 문자열 다루기

  • c 언어에서 사용한 함수 사용 가능: strcmp(), strlen(), strcpy() 등
  • 이나 <string.h> 헤더 파일 include
#include <cstring> //또는
#include <string.h>
...
int n = strlen("hello");
  • <cstring> 헤더 파일을 사용하는 것이 바람직함 : 이 c++ 표준 방식이기 때문

cin을 이용한 c스타일의 문자열 입력

char name[6];    //5개의 문자를 저장할 수 있는 char 배열
cin>>name;       //키보드로부터 문자열을 읽어 name 배열에 저장한다.

만약 Grace 를 입력했다면 name 배열에는 name[0]='G', name[1]='r', name[2]='a', name[3]='c', name[4]='e', name[5]='\0' 이 저장된다.
예제를 보자 아래는 한글문자를 입력받는 예제이다.

#include <iostream>
using namespace std;

int main(){
    cout<<"이름을 입력하세요>>";

    char name[11];  //한글은 글자당 2byte이기 때문에 5개 글자, 영문은 10개까지 저장할 수 있다.
    cin>>name;  //키보드로부터 문자열을 읽는다.

    cout<<"이름은 "<<name<<"입니다."<<'\n';   //이름을 출력한다.
}

스크린샷 2021-10-17 오전 11 52 32

그렇다면 공백이 포함된 문자열을 입력받는 방법은 무엇일까?

cin.getline()으로 공백이 낀 문자열을 입력받기

cin.getline(char buf[],int size,char delimitChar)

  • buf에 최대 size-1개의 문자 입력. 끝에 '\0' 붙임.
  • deliminateChar를 만나면 입력 중단. 끝에 '\0' 붙임.: deliminateChar의 default 값은 '\n' (Enter키)

스크린샷 2021-10-17 오전 11 56 20

예제

#include <iostream>
using namespace std;

int main(){
    cout<<"주소를 입력하세요>>";

    char address[100];
    cin.getline(address,100,'\n');  //키보드로부터 주소 읽기

    cout<<"주소는"<<address<<"입니다."<<'\n'; //입력받은 주소 출력
}

스크린샷 2021-10-17 오후 12 00 11

 

 

c++의 string 클래스를 이용한 문자열을 다루기

string 클래스

  • c++ 에서 강력 추천
  • c++ 표준 클래스
  • 문자열의 크기에 따른 제약 없음: string 클래스가 스스로 문자열 크기에 맞게 내부 버퍼를 조절
  • 문자열 복사, 비교, 수정 등을 위한 다양한 함수와 연산자 제공
  • 객체 지향적
  • c-스트링보다 다루기 쉬움

아래 예제를 통해 한번에 정리한다.

스크린샷 2021-10-17 오후 12 03 36

'ETC' 카테고리의 다른 글

[git] 레포지토리(폴더) 이름 수정하기  (0) 2021.10.20
[ios] 에뮬레이터 위치 정보 설정하기  (0) 2021.10.19
[c++] inline 함수  (0) 2021.10.18
[c++] cin의 개념  (0) 2021.10.18
[c++] namespace 개념  (0) 2021.10.18
[c++] c++의 특징  (0) 2021.10.18

댓글