본문 바로가기
개발 이야기/개발자 이야기

[MFC] CString 문자열 추출

by 런던살자 2018. 11. 8.

안녕하세요 마블랑입니다


지난 번에 CString 문자열을 특정문자로 나누는 방법에 대해서 설명을 드렸는데요, 이번에는 CString문자열에서 문자열을 추출하는 방법에 대해서 설명 하겠습니다.



문자열를 추출을 하려면 정규화된 규칙대로 문자열이 구성되어있어야합니다. 


그렇지 않으면 사용자의 입력을 받아서 특정위치의 문자열을 추출해야합니다. (구현하려는 프로그램에 따라 알맞게 구현하시면 됩니다.)


날짜와 시간을 예로 들어봅시다. 다음과 같이 날짜와 시간을 나타내는 문자열이 있습니다.


2018-08-15 13:08:40.123

2018-09-30 08:24:35.456

2018-10-08 10:57:19.789

2018-11-08 12:12:12.012

...


마지막 문장에서 월과 일을 추출하려면 왼쪽에서 5번째부터 5개의 문자를 가져오면 "11-08"라는 문자열을 가져오게 되죠


다른 문자열들도 각각 "08-15", "09-30", "10-08" 를 추출하므로 문제가 발생하지 않습니다.


하지만 날짜와 시간이 다른형식으로 정의된 문자열을 같은 방식으로 추출해볼까요?


20160203 05:44:30.514 


위 문자열을 추출하게 되면 "203 0"과 같이 월과 일이 아닌 값을 출력하게 됩니다.


이러한 문제점을 막기 위해서는 추출시에 동적인 입력값을 이용해서 추출을 해야합니다. (이 방법에 대해서는 본 포스팅과는 관련이 없으므로 패스하겠습니다.)



그럼 문자열에서 문자열을 추출하는 함수에 대해서 알아볼까요?


바로 CString::Left, CString::Right, CString::Mid 함수를 이용하시면 원하는 위치의 문자열을 추출할수 있습니다. 


함수에 대해서 설명을 드리겠습니다. 


CString Left( int nCount ) : 왼쪽 문자열 처음부터 카운트만큼의 문자열 추출


CString Right( int nCount ) : 오른쪽 문자열 마지막부터 카운트만큼의 역순으로 문자열 추출


CString Mid(int nFirst) : 문자열 왼쪽기준부터 First인자부터 마지막까지 추출


CString Mid(int nFirst,int nCount) : 문자열 왼쪽기준부터 First인자부터 카운트 만큼의 문자열 추출



예제를 통해 설명해드리겠습니다. 


1. CString str = "Hello~ I'm Mablang. Nice to meet you";


2. AfxMessageBox(str.Left(1)); 

3. AfxMessageBox(str.Left(5));


4. AfxMessageBox(str.Right(1));

5. AfxMessageBox(str.Right(7));


6. AfxMessageBox(str.Mid(14, 1));

7. AfxMessageBox(str.Mid(14));

8. AfxMessageBox(str.Mid(14,5));


1: 문자열을 추출하기 위한 원본 문자열입니다.

2: 원본 문자열의 왼쪽부터 1개의 문자를 추출합니다. (매개변수만큼의 문자가 추출되므로 0을 입력하면 공백이 추출됩니다)

3: 원본 문자열의 왼쪽부터 5개의 문자를 추출합니다.

4: 원본 문자열의 마지막부터 역순으로 1개의 문자를 추출합니다. (위와 동일하게 0을 입력하면 공백이 추출됩니다)

5: 원본 문자열의 마지막부터 역순으로 7개의 문자를 추출합니다.

6: 원본 문자열의 왼쪽 기준으로 14번째 문자부터 1개의 문자를 추출합니다. (위와 동일하게 0을 입력하면 공백이 추출됩니다)

7: 원본 문자열의 왼쪽 기준으로 14번째 문자부터 마지막까지 추출합니다.

8: 원본 문자열의 왼쪽 기준으로 14번째 문자부터 5개의 문자를 추출합니다.



어떻게 출력이 되는지 확인해 보겠습니다. 


str.Left(1) -> "H"

str.Left(5) -> "Hello"


str.Right(1)         -> "u"

str.Right(7)         -> "eet you"


str.Mid(14, 1) -> "l"

str.Mid(14)         -> "lang. Nice to meet you"

str.Mid(14, 5) -> "lang."


이해가 되셨나요?


문자열에서는 공백과 특수문자도 한개의 문자로 보기때문에 포함해서 개수를 입력하시는게 좋습니다.




이상 CString의 문자열 추출에 대한 포스팅을 마치겠습니다.


CString 을 사용하였지만 char 배열이라고 생각하고 인덱스로 접근한다고 보시면 될거 같습니다.


읽어주신 분들께 모두 도움이 되길 바라며 다음 포스팅에 다시 인사드리겠습니다~

댓글