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() | 문자열의 특정 부분을 제거하는 데 사용된다. |
'C++' 카테고리의 다른 글
C++ 문자열 배열(Array of Strings) 총정리 (0) | 2024.06.18 |
---|---|
C++ std::string 클래스 총정리 (0) | 2024.06.17 |
C++ 배열 붕괴(Array Decay) 총정리 (0) | 2024.06.03 |
C++ 함수에 배열 전달 총정리 (0) | 2024.05.29 |
C++ 배열 파라미터의 크기를 프린트하는 방법 (0) | 2024.05.29 |