코딩 초급

문자열 문제에 유용한 도구

태장고 21302 2021. 11. 28. 19:32

문자열 문제를 풀다보면 이런건 있으면 편할 텐데... 라는 생각이 들 때가 많다.

예를 들면, 문자열을 비교하거나 문자열의 길이가 주어지지 않은 경우 등의 다양한 경우가 있다.

 

이번 글에서는 알아두면 유용한 문자열 함수에 대해 알아보자.

 

https://www.cplusplus.com/reference/cstring/

^-- cstring reference

 

1. string.h( = cstring )

string.h는 문자열을 처리하는 함수를 모아둔 헤더 파일이다. 이 헤더 파일을 코드에 포함시키면 문자열의 길이, 문자열 비교 등을 쉽게 처리할 수 있다. 예시를 한번 봐보자.

 

- 문자열의 길이를 알아내는 방법 ( strlen )

 strlen의 어원은 str( ing )len( gth )으로 문자열의 길이를 나타낸다. 사용법은 다음과 같다.

#include <cstring>

int main()
{
    char s[110] = {};
    int len = strlen(s); // 문자열 s의 길이를 len에 저장
	...

 

- 문자열을 비교하는 방법 ( strcmp )

 strcmp의 어원은 str( ing )c( o )mp( are ) 로 문자열 비교를 나타낸다.

 

문자열 비교 함수의 경우에는 3가지의 형태로 판별이 가능한데,

strcmp(s1, s2)에서 s1이 s2보다 사전순으로 앞에 있으면 두 문자열의 차이를 음수로, 같으면 0을, 사전순으로 뒤에 있으면 두 수의 차이를 양수로 return한다.

 

주의해야 할 것은 문자열 비교함수를 사용할 때, string 타입을 사용해 선언된 문자열을 비교할 경우 에러가 난다.

이유를 정확히는 모르겠지만, string 타입은 c++에 존재하는 타입이고 cstring은 c에서 사용하는 헤더니까 에러가 나지 않을까 라는 생각이 든다.

 

실제도 뜯어보면 string이 아니라 char로 되어있는 것을 확인할 수 있다.

extern int strcmp (const char *__s1, const char *__s2)

 

사용법은 다음과 같다.

#include <cstring>

int main()
{
    char s[110] = {};
    int t = strcmp(s, "Hello"); // 문자열 s와 "Hello"를 비교
	...

 

2. stdio.h ( = cstdio )

여기서도 문자열 관련해서 유용하게 쓸 수 있는 도구가 하나 있다.

 

1. 숫자를 문자열로 변환 ( sprintf )

 숫자를 문자열로 변환할 수 있는 도구이다. 사용 예시는 다음과 같다.

#include <cstdio>

int main()
{
    int n; char s[110] = {};
    sprintf(s, "%d", n); // 정수 n을 문자열 s로 변환
	...

만약 123이라는 수를 문자열로 변환하면, s[0] = '1', s[1] = '2', s[2] = '3'으로 입력 된다.

 

여기까지 PS를 하면서 문자열 문제를 만나면 유용하게 쓸 수 있는 기능 몇개를 알아보았다.

 

사용법이 간단하고, 쓰면 편하기 때문에 꼭 알아두면 좋다고 생각한다.

 

이상으로 끝!