Home » 레퍼런스 » C » c언어 strchr 함수로 문자열에서 문자를 찾아봅시다.

c언어 strchr 함수로 문자열에서 문자를 찾아봅시다.

c언어 strchr 함수는 문자열에서 문자를 찾는 함수입니다. 이 함수의 사용법을 간단하게 알아보도록 하겠습니다.


함수의 원형

string.h에 있는 c언어 strchr 함수의 원형은 아래와 같습니다.

[그림 1] 함수의 원형
  • str
    • 특정 문자를 찾을 문자열의 시작 위치
  • ch
    • 문자
  • 리턴 값
    • 문자를 찾으면 나타난 첫 위치, 그렇지 않으면 null

이제 예제를 몇 개 보겠습니다.


1번 예제

예제 1번을 보겠습니다.

[그림 2] 예제 1번 프로그램

문자열 str에는 “bbabba”가 있습니다. 그런데, 이 문자열로부터 ‘c’라는 문자를 찾으려고 합니다. 그 어디에도 ‘c’라는 문자열은 없어요. 따라서, 리턴값은 NULL이 됩니다. 7번째 줄에, post가 NULL이면, c is not found가 뜨게 되는데요. 결과를 봅시다.

[그림 3] 예제 1번 프로그램의 결과

정확하게 c ins not found in bbabba가 뜨게 됩니다. 특정 string에서 문자를 찾을 수 없으면 null을 리턴하는 것 알아두시면 되겠습니다.


2번 예제

이제 2번 예제를 보겠습니다.

[그림 4] 예제 2번 프로그램

이 프로그램은 뭘 하는 것일까요? 6번째 줄부터 해석해 보도록 하지요. 일단

  • strchr(str, ‘a’)가 있습니다.
  • 이것은 str에서 ‘a’가 나오는 처음 위치를 찾는다고 되어 있습니다.

찾아볼까요?

str은 ‘b’, 즉 군청색으로 표시한 부분을 가리킵니다. 그리고 7번째 원소는 null 문자가 있습니다. str부터 탐색할 것인데요. 맨 처음으로 나오는 ‘a’의 위치를 찾아보겠습니다.

노란색으로 표시한 부분입니다. 그렇죠? post를 시작으로 하는 문자열은 “abba”이기 때문에, 1번째 출력문인 printf 문에서는 “abba”가 출력되게 됩니다.

다음, post+1부터 strchr 함수를 수행한다고 했어요. 그러면 군청색 부분부터 탐색하게 될 것입니다. 탐색을 하는데, 처음으로 나타나는 ‘a’를 찾겠네요. 그 위치가 어디인가요?

제가 노란색으로 칠한 곳입니다. 2번째 strchr 함수는 노란색 원소를 가리키는 포인터를 리턴합니다. 그리고, 이 위치부터 문자열을 출력하라고 했습니다. 2번째 printf 문이 이를 수행하지요. “a” 다음에 널 문자가 있기 때문에, “a”만 출력됩니다.

[그림 5] 예제 2번 프로그램의 결과

예제 2번 프로그램의 결과는 위와 같습니다. 첫 번째는 “abba”가, 2번째는 “a”가 출력됩니다.


3번 예제

예제 2번을 이용하면 나름 쓸만한 프로그램을 만들 수 있습니다. 문자열에서 특정 문자가 나타나는 위치를 모두 찾는 프로그램을 만들어 보자고요.

[그림 6] 예제 3번 프로그램

먼저, cur를 str의 시작 주소로 초기화 해요. 다음에, strchr로 ‘a’의 위치를 찾을 건데요. 못 찾으면 바로 빠져나오면 되겠지요? while loop 안에 있는 탈출 조건입니다. 그렇지 않으면, 찾은 위치를 출력합니다. 그리고, cur를 증가시켜서, 다음 원소를 가리키게 하면 됩니다. 예제 2번을 응용한 것 뿐입니다.

[그림 7] 예제 3번 프로그램의 결과

결과는 2, 5, 7. 제대로 출력 되었음을 볼 수 있습니다.

Leave a Comment

3 + 13 =