C++

C++ 문자열(Strings) 총정리

김구티2 2024. 6. 4. 20:24

1. 문자열의 개념

C++ 문자열은 문자 배열에 저장된 문자의 시퀀스다. 이 문자열은 단어와 텍스트를 저장하는 데 사용된다. 또한, 문자열은 숫자 및 기타 유형의 정보와 같은 데이터를 저장하는 데에도 사용된다. C++의 문자열은 std::string class 또는 C-style character array를 사용하여 정의할 수 있다.

2. C 스타일 문자열

이 문자열들은 null 문자 '\0'으로 끝나는 일반적인 오래된 문자 배열로 저장된다. 이 문자열들은 C 언어에서 C++가 물려받은 문자열 유형이기도 하다.

 

구문:

char str[] = "Gutilog";

 

예시:

// C++ Program to demonstrate strings
#include <iostream>
using namespace std;

int main()
{

     char s[] = "Gutilog";
     cout << s << endl;
     return 0;
}

 

출력:

Gutilog

3. std:: 문자열 클래스

이것들은 C++에서 <string> 헤더 파일 내부에 정의된 std::string 클래스로 도입된 새로운 유형의 문자열이다. 이것은 동적 크기, 멤버 함수 등과 같은 기존의 C 스타일 문자열에 비해 많은 이점을 제공한다.

 

구문:

std::string str("Gutilog");

 

예시:

// C++ program to create std::string objects
#include <iostream>
using namespace std;

int main()
{

     string str("Gutilog");
     cout << str;
     return 0;
}

 

출력:

Gutilog

 

또 한 가지 방법은 같은 문자를 반복하는 문자열을 만들 수도 있다.

 

구문:

std::string str(number,character);

 

예시:

#include <iostream>
using namespace std;

int main()
{
     string str(5, 'g');
     cout << str;
     return 0;
}

 

출력:

ggggg

4. C++에서 문자열을 정의하는 방법

문자열은 C++에서 여러 가지 방법으로 정의할 수 있다. 문자열 클래스를 사용하여 표준 라이브러리에서 문자열에 액세스할 수 있고, 문자열을 정의하는 데 문자 배열을 사용할 수도 있다. 문자열은 일반적으로 사용되는 방법인 검색 및 조작과 같은, 풍부한 기능 집합을 제공한다. 이 방법은 문자열 클래스보다 덜 발전했음에도 불구하고 더 효율적이고 사용하기 쉽기 때문에 여전히 널리 사용된다. 문자열을 C++에서 정의하는 방법은 다음과 같다.

 

① 문자열 키워드 사용

배열 키워드를 사용하는 대신, 문자열 키워드로 문자열을 정의하는 것이 쓰기 쉽고, 이해하기 쉽기 때문에 더 편리한 것으로 여겨진다.

 

구문:

string s = "Gutilog";
string s("Gutilog");

 

예시:

// C++ Program to demonstrate use of string keyword
#include <iostream>
using namespace std;

int main()
{

     string s = "Gutilog";
     string str("Gutilog");

     cout << "s = " << s << endl;
     cout << "str = " << str << endl;

     return 0;
}

 

출력:

s = Gutilog
str = Gutilog

 

② C-style 문자열 사용

문자열을 정의할 때 strcpy(), strcmp(), strcat()와 같은 C 스타일 문자열 라이브러리 함수를 사용한다. 이 방법은 더 복잡하고, 그렇기에 다른 두 가지 방법만큼 널리 사용되지는 않지만, 레거시 코드를 다룰 때나 성능이 필요할 때 유용할 수 있을 것이다.

 

구문:

char s[] = {'g', 't', 'l', '\0'};
char s[4] = {'g', 't', 'l', '\0'};
char s[4] = "gtl";
char s[] = "gtl";

 

예시:

// C++ Program to demonstrate C-style string declaration
#include <iostream>
using namespace std;

int main()
{

     char s1[] = { 'g', 't', 'l', '\0' };
     char s2[4] = { 'g', 't', 'l', '\0' };
     char s3[4] = "gtl";
     char s4[] = "gtl";

     cout << "s1 = " << s1 << endl;
     cout << "s2 = " << s2 << endl;
     cout << "s3 = " << s3 << endl;
     cout << "s4 = " << s4 << endl;

     return 0;
}

 

출력:

s1 = gtl
s2 = gtl
s3 = gtl
s4 = gtl

 

예시2:

#include <iostream>
using namespace std;

int main()
{
     string S = "Gutilog";
     cout << "Your string is= ";
     cout << S << endl;

     return 0;
}

 

출력:

Your string is= Gutilog

5. C++에서 문자열 입력을 받는 방법

문자열 입력은 사용자로부터 문자열을 받아들이는 것을 의미한다. C++에서는 문자열에 따라 입력을 받는 유형이 다르다. 가장 일반적인 방법은 C++에서 추출 연산자(>)와 함께 cin 키워드로 입력을 받는 것이다. 문자열을 입력으로 받는 방법은 다음과 같다.

 

① cin 사용

문자열 입력을 취하는 가장 간단한 방법은 스트림 추출 연산자(>>)와 함께 cin 명령을 사용하는 것이다.

 

구문:

cin>>s;

 

예시:

// C++ Program to demonstrate string input using cin
#include <iostream>
using namespace std;

int main() {

          string s;

     cout<<"Enter String"<<endl;
          cin>>s;

          cout<<"String is: "<<s<<endl;
     return 0;
}

 

출력:

Enter String
String is: 


이제 여기서 Stinrg is: 에 gutilog 같은 게 들어가는 것이다. 이는 아래의 경우에서도 마찬가지이다.

② getline 사용

C++의 getline() 함수는 입력 스트림에서 문자열을 읽는 데 사용된다. 이 함수는 <string> 헤더 파일에 선언된다.

 

구문:

getline(cin,s);

 

예시:

// C++ Program to demonstrate use of getline function
#include <iostream>
using namespace std;

int main()
{

     string s;
     cout << "Enter String" << endl;
     getline(cin, s);
     cout << "String is: " << s << endl;
     return 0;
}

 

출력:

Enter String
String is: 

③ stringstream 사용

C++의 stringstream 클래스는 여러 개의 문자열을 한 번에 입력하는 데 사용된다.

 

구문:

stringstream stringstream_object(string_name);

 

예시:

// C++ Program to demonstrate use of stringstream object
#include <iostream>
#include <sstream>
#include<string>

using namespace std;

int main()
{

     string s = " Guti to the Champs";
     stringstream obj(s);
     // string to store words individually
     string temp;
     // >> operator will read from the stringstream object
     while (obj >> temp) {
          cout << temp << endl;
     }
     return 0;
}

 

출력:

Guti

to

the

Champs

6. 함수에 문자열을 전달하는 방법

배열을 함수에 전달하는 것과 같은 방식으로, C++의 문자열은 문자 배열로서 함수에 전달될 수 있다.

 

예시:

// C++ Program to print string using function
#include <iostream>
using namespace std;

void print_string(string s)
{
     cout << "Passed String is: " << s << endl;
     return;
}

int main()
{

     string s = "Gutilog";
     print_string(s);

     return 0;
}

 

출력:

Passed String is: Gutilog

7. 포인터 및 문자열

C++의 포인터는 주소를 상징적으로 표현한 것이다. 프로그램이 참조에 의한 호출을 시뮬레이션 할 수 있을 뿐만 아니라, 동적인 데이터 구조를 만들고 조작할 수 있게 해주는 것이다. 포인터를 사용하면 문자열의 시작 주소인 문자열의 첫 번째 문자를 얻을 수 있다. 아래와 같이 주어진 문자열은 포인터를 통해 액세스하고 프린트할 수 있다.

 

예시:

// C++ Program to print string using pointers
#include <iostream>
using namespace std;

int main()
{

     string s = "Gutilog";

     // pointer variable declared to store the starting
     // address of the string
     char* p = &s[0];

     // this loop will execute and print the character till
     // the character value is null this loop will execute and
     // print the characters

     while (*p != '\0') {
          cout << *p;
          p++;
     }
     cout << endl;

     return 0;
}

 

출력:

Gutilog

8. 문자열(String)과 문자 배열(Character Array)의 대조

문자열 문자 배열
문자열은 문자열 스트림으로 표현할 수 있는 개체를 정의한다. Null 문자는 문자 배열을 종료한다.
문자열이 개체로 표현되기 때문에 문자열에 배열 붕괴가 발생하지 않는다. 배열 붕괴의 가능성이 존재한다.
문자열 클래스는 문자열을 조작하기 위한 수많은 함수를 제공한다. 문자 배열은 문자열을 조작할 수 있는 내장 함수를 제공하지 않는다.
메모리가 동적으로 할당된다. 문자 배열의 크기는 정적으로 할당되어야 한다.

9. 문자열 함수

C++는 문자열을 복사하고 연결하기 위한 strcpy() 및 strcat() 함수와 같이, 문자열 조작에 사용되는 일부 내장 함수를 제공한다. 그 중 일부는 다음과 같다.

함수 설명
length() 문자열의 길이를 리턴한다.
swap() 2개의 문자열 값을 교환하는 데 사용된다.
size() 문자열의 크기를 찾는 데 사용된다.
resize() 문자열의 길이를 지정된 문자 수까지 크기를 조정하는 데 사용된다.
find() 문자열 내부의 특정 하위 문자열을 검색하는 데 사용되며, 하위 문자열의 첫 번째 문자의 위치를 리턴한다.
push_back() 문자열 끝에 있는 통과된 문자를 추가하는 데 사용된다.
pop_back() 문자열에서 마지막 문자를 터뜨리는 데 사용된다.
clear() 문자열의 모든 요소를 제거하는 데 사용된다.
strncmp() 전달된 두 문자열의 최대 첫 번째 바이트를 비교한다.
strncpy() 최대 n 바이트의 src가 복사된다는 점을 제외하고는 strcpy() 함수와 유사하다.
strrchr() 문자열에서 문자의 마지막 발생 위치를 찾는다.
strcat() 소스 문자열의 복사본을 대상 문자열의 끝에 추가한다.
replace() 이전 값과 동일한 범위(처음, 마지막)의 각 요소를 새 값으로 교체하는 데 사용된다.
substr() 주어진 문자열에서 하위 문자열을 만드는 데 사용된다.
compare() 두 문자열을 비교하는 데 사용되며, 정수의 형태로 결과를 리턴한다.
erase() 문자열의 특정 부분을 제거하는 데 사용된다.

 

728x90