1. 문자열 함수의 개념
문자열은 말 그대로 문자의 배열이다. C++에서 문자의 열은 문자 배열에 저장된다. C++는 문자열을 나타내는 데 사용되는 std::string 클래스를 포함하는데, 이것은 C++에서 가장 기본적인 데이터 유형 중 하나이며, 수많은 내장 함수 세트와 함께 제공된다. 이 글에서는 문자열 계산의 함수를 살펴볼 것이다.
문자열의 선언 및 초기화:
std::string company = "Gutilog!";
2. C+에서 일반적으로 사용되는 문자열 함수
std::string 클래스는 몇 가지 일반적인 문자열 연산을 제공하는 함수를 포함한다. 아래는 C++에서 가장 일반적으로 사용되는 함수 중 일부를 기술한 것이다.
카테고리 | 함수 및 연산자 | 내용 |
문자열 길이 | length() / size() | 문자열의 길이를 리턴한다. |
문자 접근 | Indexing | 배열 인덱싱을 사용하여 개별 문자에 엑세스한다. |
at() | 지정된 인덱스에서 문자에 엑세스하는 데 사용된다. | |
문자열 추가 및 연결 | + 연산자 | 두 개의 문자열을 연결하는 데 사용된다. |
append() | 하나의 문자열을 다른 문자열의 끝에 추가한다. | |
문자열 비교 | == 연산자 | 문자열을 비교한다. |
compare() | 비교 결과를 나타내는 정수 값을 리턴한다. | |
문자열 자르기 | substr() | 문자열에서 부분 문자열을 추출한다. |
검색 | find() | 부분 문자열이 처음 발생한 위치를 리턴한다. |
문자열 수정 | replace() | 문자열의 일부를 수정한다. |
insert() | 지정된 위치에 부분 문자열을 추가한다. | |
erase() | 문자열의 일부를 제거한다. | |
변환 | c_str() | std::string에서 C 스타일 문자열을 가져오기 위해 사용된다. |
① length() / size()
std::string 클래스의 length() 또는 size() 함수를 사용하여 문자열의 길이(문자 수)를 찾을 수 있다.
구문:
string_object.size()
or
string_object.length()
파라미터: 없다.
리턴 값: 문자열 개체의 문자 수 반환한다.
예시:
std::string text = "gutilog";
int length = text.length();
//or
int length = text.size();
위 프로그램에 따르면 7을 리턴하게 된다.
② at()
일반적으로, [] 배열 연산자와 인덱싱을 사용하여 문자열의 문자에 액세스할 수 있다. 그러나 std::string에는 문자열의 문자에 액세스하는 데 사용할 수 있는 at()라는 함수도 있다.
구문:
string_object.at(index);
파라미터: 인덱스로, 문자열에서 문자의 위치를 나타낸다.
리턴 값: 인덱스에 존재하는 문자를 반환한다.
예시:
std::string str = "GUTIWORLD";
std::cout << str.at(3);
위 프로그램에서 3번째 위치를 반환하였으므로, I가 반환된다. G는 0번째로 취급한다.
③ append() 또는 + 연산자
C++에서 문자열을 연결하는 것이라고 하면 이 2가지를 떠올리면 된다.
⑴ + 연산자
std::string 클래스에서 + 연산자를 오버로드하여 문자열 연결을 수행한다.
구문:
string_object1 + string_object2
예시:
std::string firstName = "Guti";
std::string lastName = "World";
std::string fullName = firstName + " " + lastName;
결과는 GutiWorld가 나오게 된다.
⑵ append()
append() 함수는 두 개의 문자열을 연결하는 또 다른 멤버 함수다.
구문:
string_object1.append(string2)
파라미터: string2, 문자열을 매개변수로 추가한다.
리턴 값: 최종 문자열 참조
④ compare() 또는 == 연산자
위의 ③과 마찬가지로, 문자열 비교에서는 이 2가지를 떠올리면 된다.
⑴ == 연산자
== 연산자는 std::string 클래스에서 이 작업에 대해 오버로드되므로 두 문자열을 비교하는 데 사용할 수 있다.
구문:
string_object1 == string_object2
두 문자열이 모두 같으면 true를 반환하고 그렇지 않으면 false를 반환한다.
예시:
std::string str1 = "apple";
std::string str2 = "banana";
if (str1 == str2) {
std::cout << "Strings are equal";
}
else {
std::cout << "Strings are not equal";
}
위 프로그램에서는 false가 반환된다.
⑵ compare()
compare() 함수는 std::string 클래스의 멤버 함수로, 두 문자열을 비교하는 데 사용할 수 있다.
구문:
str1.compare(str2);
파라미터: str2, 비교 대상 문자열이다.
리턴 값: 문자열이 같으면 0, str1이 str2보다 크면 0보다 큰 값을 반환, 그렇지 않으면 0보다 작은 값을 반환한다.
예시:
string str1 = "Gutii";
string str2: = "Guting";
int result = str1.compare(str2);
여기서는 str1<str2 이므로 0보다 작은 값을 반환하게 되는 것이다.
⑤ substr()
substr() 함수를 사용하여 문자열의 일부를 새 문자열 개체로 생성할 수 있다.
구문:
str1.substr(start, end);
파라미터: start, end로, 생성되는 부분 문자열의 시작과 끝 위치를 나타낸다.
리턴 값: 새로 만든 문자열 개체를 반환한다.
예시:
std::string text = "Hello, World!";
std::string sub = text.substr(7, 5); // Extract "World"
위의 프로그램에서는 부분 문자열에 World가 포함된다.
⑥ find()
std::string 클래스의 find() 함수를 사용하여 주어진 문자 또는 부분 문자열이 문자열 또는 문자열의 일부에 있는지 확인할 수 있다.
구문:
str1.find(var);
파라미터: var
리턴 값: 포인터를 문자열의 첫 번째 문자 또는 부분 문자열로 리턴한다.
예시:
std::string text = "C++ Programming";
int position = text.find("Programming"); // Find the position of a substring
위치 변수에는 문자열 텍스트에서 문자열 "Programming"이 처음 발생하는 시작인 4가 포함될 것이다.
⑦ 문자열 수정
다음과 같은 함수를 통해 현재 문자열을 수정할 수 있다.
⑴ insert()
insert() 함수를 사용하면 문자열을 추가할 수 있을 뿐만 아니라, 지정한 위치에 문자열을 추가할 수 있다. 이는 std::string 클래스의 멤버 함수이기도 하다.
구문:
str1.insert(index, str2);
파라미터: str2, index로, 삽입할 문자열과 삽입할 위치다.
리턴 유형: str1 참조
예시:
std::string text = "I have a dog.";
text.insert(9, " black"); // Insert " cute" at position 9
9번째 위치에 삽입하였으므로 I have a cute dog이 된다.
⑵ replace()
replace() 함수는 문자열의 부분을 지정된 다른 문자열로 대체한다. insert와 달리, 새 문자열을 삽입할 부분의 문자는 제거된다.
구문:
str1.replace(index, size, str2);
파라미터: 인덱스, size, str2로, 새 문자열 교체를 시작할 위치에 대한 인덱스, 교체할 문자열의 길이, 삽입할 새 문자열을 의미한다.
리턴 유형: str1 참조
예시:
std::string text = "I like dogs.";
text.replace(7, 4, "cats"); // Replace "dogs" with "cats"
7번째 인덱스의 길이4의 문자열에 대해 대체를 하는 것이다. 그래서 I like cats가 된다.
⑶ erase()
erase() 함수는 문자열의 문자 또는 일부를 제거하는 데 사용되는 std::string 클래스의 멤버 함수다.
구문:
str1.erase(start, end);
파라미터: start, end로 시작과 끝점이다.
리턴 유형: str1 참조
예시:
std::string text = "This is an example.";
text.erase(5, 3); // Erase "is "
5번째 인덱스의 3개 길이가 삭제되는 것이다. 그래서 This an example만 남는다.
* std::string을 C 문자열로 변환
c_str() 함수는 C++ 스타일 문자열, 즉 std::string 개체를 C 스타일 문자열, 즉 문자 배열로 변환하는 데 사용되는 멤버 함수다.
구문:
str1.c_str()
파라미터: 없다.
리턴 값: 동등한 문자 배열에 대한 포인터다.
예시:
std::string str = "C++";
const char* cstr = str.c_str()
이제 모든 것을 압축한 프로그램을 통해 마지막 학습을 마무리하도록 한다.
예시:
// C++ Code to demostrate various functions available in
// String class
#include <iostream>
#include <string>
using namespace std;
int main()
{
// Creating and initializing strings
string greeting = "Hello, World!";
cout << greeting << endl;
string name;
// Input from the user
cout << "Enter your name: ";
cin >> name;
cout << name << endl;
// String length
int length = greeting.length();
cout << length << endl;
// Accessing characters
char firstChar = greeting[0];
char secondChar = greeting.at(1);
cout << firstChar << " " << secondChar << endl;
// Appending and concatenating strings
string firstName = "Guti";
string lastName = "Gutis";
string fullName = firstName + " " + lastName;
cout << fullName << endl;
string base = "Hello";
cout << base << endl;
base.append(" World!");
cout << base << endl;
// String comparison
string str1 = "apple";
string str2 = "banana";
if (str1 == str2) {
cout << "Strings are equal" << endl;
}
else {
cout << "Strings are not equal" << endl;
}
int result = str1.compare(str2);
if (result == 0) {
cout << "Strings are equal" << endl;
}
else if (result < 0) {
cout << "str1 comes before str2" << endl;
}
else {
cout << "str1 comes after str2" << endl;
}
// Substrings
string text = "Hello, World!";
cout << text << endl;
string sub = text.substr(7, 5);
cout << sub << endl;
// Searching
string searchIn = "C++ Programming";
size_t position = searchIn.find("Programming");
if (position != string::npos) {
cout << "Found at position " << position << endl;
}
else {
cout << "Not found" << endl;
}
// Modifying strings
string modify = "I like dogs.";
modify.replace(7, 4, "cats");
cout << modify << endl;
modify.insert(6, " black");
cout << modify << endl;
modify.erase(6, 6);
cout << modify << endl;
// Conversion
string str = "C++";
const char* cstr = str.c_str();
cout << cstr << endl;
return 0;
}
출력:
Hello, World!
Enter your name: Gutis
Gutis
13
H e
Guti Gutis
Hello
Hello World!
Strings are not equal
str1 comes before str2
Hello, World!
World
Found at position 4
I like cats.
I like black cats.
I like cats.
C++
'C++' 카테고리의 다른 글
C++ 문자열 토큰화(Tokenizing) 총정리 (0) | 2024.07.02 |
---|---|
C++ 문자열 연결(String Concatenation) 총정리 (0) | 2024.07.02 |
C++ 문자열 배열(Array of Strings) 총정리 (0) | 2024.06.18 |
C++ std::string 클래스 총정리 (0) | 2024.06.17 |
C++ 문자열(Strings) 총정리 (0) | 2024.06.04 |