1. 문자열 배열의 개념
C++에서 문자열은 일반적으로 NULL 문자 '\0'으로 끝나는 문자의 배열이다. 문자열은 문자의 1차원 배열이고 문자열의 배열은 각 행이 일부 문자열을 포함하는 문자의 2차원 배열이다.
C++에서 문자열 배열을 만드는 방법으로는 5가지가 있다.
① 포인터 사용
② 2D 배열 사용
③ 문자열 클래스 사용
④ 벡터 클래스 사용
⑤ 배열 클래스 사용
2. 포인터 사용
포인터는 주소를 상징적으로 나타내는 것이다. 간단히 말해서 포인터는 변수의 주소를 저장하는 것이다. 이 방법에서 문자열 리터럴의 배열은 각 포인터가 특정 문자열을 가리키는 포인터의 배열로 만들어진다.
예시:
// C++ program to demonstrate
// array of strings using
// pointers character array
#include <iostream>
// Driver code
int main()
{
// Initialize array of pointer
const char* colour[4]
= { "Blue", "Red", "Orange", "Yellow" };
// Printing Strings stored in 2D array
for (int i = 0; i < 4; i++)
std::cout << colour[i] << "\n";
return 0;
}
출력:
Blue
Red
Orange
Yellow
문자열의 수는 고정되어 있지만, 사실 그럴 필요는 없다. 4는 생략될 수 있으며, 컴파일러가 정확한 크기를 계산할 것이기 때문이다. 그런데 이러한 문자열은 상수이므로 내용을 변경할 수 없다. 문자열 리터럴은 메모리의 읽기 전용 영역에 존재하기 때문에 프로그램을 충돌시킬 수 있는 원하지 않는 액세스를 방지하려면 여기에서 "const"를 지정해야 한다.
3. 2D 배열 사용
2D 배열은 표 형식으로 데이터를 저장하는 다차원 배열의 가장 간단한 형태다. 이 방법은 모든 문자열의 길이가 알려져 있고 특정한 메모리 사용량을 원할 때 유용하다. 이때 문자열을 위한 공간이 단일 블록에 할당된다.
예시:
// C++ program to demonstrate
// array of strings using
// 2D character array
#include <iostream>
// Driver code
int main()
{
// Initialize 2D array
char colour[4][10]
= { "Blue", "Red", "Orange", "Yellow" };
// Printing Strings stored in 2D array
for (int i = 0; i < 4; i++)
std::cout << colour[i] << "\n";
return 0;
}
출력:
Blue
Red
Orange
Yellow
문자열의 수와 문자열의 크기는 모두 고정되어 있다. 4는 다시 생략될 수 있으며, 적절한 크기는 컴파일러에 의해 계산될 것이다. 하지만 두 번째 차원은 컴파일러가 적절한 메모리 레이아웃을 선택할 수 있도록 주어져야 한다. 위에서는 10이 될 것이다. 각각의 문자열은 수정될 수 있지만 두 번째 차원에 의해 주어진 전체 공간을 차지할 것이다. 각각은 메모리에서 서로 옆에 놓여질 것이고, 크기를 바꿀 수 없다. 그리고 여기서 메모리 사용량을 제어하는 것이 바람직하며, 이는 고정된 규칙적인 레이아웃으로 메모리 영역을 할당한다.
4. 문자열 클래스 사용
STL 문자열 또는 문자열 클래스는 변경 가능한 문자열의 배열을 만드는 데 사용될 수 있다. 이 방법에서는 문자열의 크기가 고정되지 않고 문자열을 변경할 수 있으므로 본질적으로 동적이지만, std::string을 사용하여 내장 함수를 사용하여 문자열 배열을 만들 수 있다.
예시:
// C++ program to demonstrate
// array of strings using
// string class
#include <iostream>
#include <string>
// Driver code
int main()
{
// Initialize String Array
std::string colour[4]
= { "Blue", "Red", "Orange", "Yellow" };
// Print Strings
for (int i = 0; i < 4; i++)
std::cout << colour[i] << "\n";
}
출력:
Blue
Red
Orange
Yellow
배열은 고정된 크기이지만 꼭 그럴 필요는 없다. 여기서도 4는 생략될 수 있으며, 컴파일러가 배열의 적절한 크기를 결정한다. 물론, 문자열도 변경이 가능하도록 변경할 수 있다.
5. 벡터 클래스 사용
벡터는 한계를 초과하는 새로운 문자가 추가될 때마다 크기가 두 배로 증가하는 동적 배열이다. STL 컨테이너 벡터를 사용하여 크기가 달라질 수 있는 배열을 동적으로 할당할 수 있다.
예시:
// C++ program to demonstrate
// array of strings using
// vector class
#include <iostream>
#include <string>
#include <vector>
// Driver code
int main()
{
// Declaring Vector of String type
// Values can be added here using
// initializer-list
// syntax
std::vector<std::string> colour{"Blue", "Red",
"Orange"};
// Strings can be added at any time
// with push_back
colour.push_back("Yellow");
// Print Strings stored in Vector
for (int i = 0; i < colour.size(); i++)
std::cout << colour[i] << "\n";
}
출력:
Blue
Red
Orange
Yellow
벡터는 동적 배열이며 언제든지 항목을 추가 및 제거할 수 있다. 모든 유형 또는 클래스가 벡터에 사용될 수 있지만, 주어진 벡터는 한 가지 유형만 유지할 수 있다는 것을 명심해야 한다.
개인적으로는 벡터 클래스를 이용하는 것이 가장 좋은 방법인 것으로 보인다.
6. 배열 클래스 사용
배열은 메모리 공간에 연속적으로 저장되는 데이터의 균일한 혼합물이라 할 수 있다. STL 컨테이너 배열은 고정된 크기의 배열을 할당하는 데 사용될 수 있다. 벡터와 매우 유사하게 사용될 수 있지만 크기는 항상 고정되어 있다.
예시:
// C++ program to demonstrate
// array of string using STL array
#include <array>
#include <iostream>
#include <string>
// Driver code
int main()
{
// Initialize array
std::array<std::string, 4> colour{"Blue", "Red",
"Orange", "Yellow"};
// Printing Strings stored in array
for (int i = 0; i < 4; i++)
std::cout << colour[i] << "\n";
return 0;
}
출력:
Blue
Red
Orange
Yellow
'C++' 카테고리의 다른 글
C++ 문자열 연결(String Concatenation) 총정리 (0) | 2024.07.02 |
---|---|
C++ 문자열 함수(String Functions) 총정리 (0) | 2024.06.24 |
C++ std::string 클래스 총정리 (0) | 2024.06.17 |
C++ 문자열(Strings) 총정리 (0) | 2024.06.04 |
C++ 배열 붕괴(Array Decay) 총정리 (0) | 2024.06.03 |