본문 바로가기
Develop/Cpp

[Cpp] 문자열 함수 (cstring)

by Tarra 2022. 6. 22.

 


개인 공부 후 자료를 남겨놓기 위한 목적이므로,
생략되거나 오류가 있을 수 있음을 알립니다.

 

 

 

이번 포스팅에서는 라이브러리 중에 string을 사용하지 않고,

 

char를 이용하는 라이브러리를 통해 문자열을 다루어보도록 한다.

 

char를 이용 문자열을 다루는 라이브러리는 아래의 두 라이브러리가 있다.

 

  • string.h
  • cstring

 

두 라이브러리를 같은 기능을 하지만, 보통 C에서는 첫 번째 라이브러리를 사용하고, 

 

Cpp에서는 아래의 라이브러리를 사용한다.

 

( 위 두 라이브러리는 <string>과는 다른 라이브러리이다.)

 


cstring을 이용하여 문자열 복사하기.

 

특정 문자열을 buf라는 char 변수에 복사해보도록 하자.

 

이때 사용하는 함수는 strcpy()라는 함수이며, 다음과 같은 방법으로 사용한다.

 

 

 

strcpy()

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cstring>
using namespace std;
 
int main() {
    
    char buf[10];
 
    strcpy(buf, "HI");    
        
    cout << buf;    
    // buf에는 "HI"가 복사 됨.
 
    return 0;
}
cs

 

 

 

 

strcmp()

 

strcmp는 두 인자가 같은지 아닌지를 확인하는 함수이다.

 

같은 경우에는 0을 출력하기 때문에 보통 !strcmp()로 사용해 같은 경우 1(true)이 출력되도록 사용한다.

 

(id과 password 가 맞는지 확인하고, LOGIN과 FAIL를 출력하는 코드)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstring>
using namespace std;
 
int main() {
    
    //strcmp(문자1, 문자2) == 0 이면 같다는 의미
    
    char id[10];
    char password[10];
 
    cin >> id >> password;
    
    if (!strcmp(id, "tarra"&& !strcmp(password, 1234)) {
        cout << "LOGIN";
    } else {
        cout << "FAIL";
    }
 
    return 0;
}
cs

 

 

 


 

 

 

만약 <string>을 사용한다면?

 

string을 사용하게 된다면 훨씬 간단한 방법으로 두 변수를 비교할 수 있게 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string>
using namespace std;
 
int main() {
    
    string id, password;
    cin >> id >> password;
    
    if (id == "tarra" && password == "1234") {
        cout >> "LOGIN";
    } else cout >> "FAIL";
 
    return 0;
}
cs

 

그럼에도 cstring을 공부하는 이유?

 

=>  추후에 배울 파싱(Parsing)을 좀 더 잘 이해하고, 사용하기 위해서!

 

 

 

 

'Develop > Cpp' 카테고리의 다른 글

[C++] String 클래스  (0) 2022.06.22
[Cpp] Direct 배열  (0) 2022.06.22
[Cpp] STL (스택, 큐, 우선순위 큐)  (0) 2022.06.22
[Cpp] 구조체  (0) 2022.06.21
[Cpp] 함수 호출 방식 (Call by value, Call by reference)  (0) 2022.06.20