C++

C++ 문자열 함수(String Functions) 총정리

김구티2 2024. 6. 24. 21:47

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++

728x90