[C언어] 문자열 카운트

Words
249
Reading
2 min
8y
Listen to this post
~2 min

[C언어] 문자열 카운트


C언어 입문기 때 문자열을 처리하는 방법에 대해서 공부를 많이 하게 됩니다. 한글자, 한단어, 한문장 순으로 여러가지 형태로 문자를 처리하게 되는데 그 중 한번쯤은 풀어 봤을법한 주제 들 중 선택한 것이 문자열 카운트 세기 입니다. 과거 이 내용을 실험했던 자료를 찾았는데 그 내용을 post로 작성해 보았습니다.

1. 문자 카운트 세기


문자열 카운트를 세기 전 문자를 카운터 세기를 해보겠습니다.

문자열 관련 헤더파일은 string.h 파일입니다. 아래와 같이 선언을 해줘야 문자열 함수들을 사용 할 수 있습니다.

#include 

[문자 카운트 세기]

int char_cnt(char *ptr, char ch){
  int i = 0;
  while(*ptr){
   if(*ptr++ == ch)  i++;
  }
  return(i);
}

포인트 변수를 사용하여 카운트를 셀 문자열에서 각 문자들을 카운트를 세기 위한 문자(ch)과 비교하여 카운트를 세기를 수행하는 로직입니다. 최종적으로 리턴 i값으로 문자열 속의 해당 문자가 얼마나 들어 있는지 i(카운트) 값으로 알 수 있게 됩니다.

정상 작동하는지 살펴볼까요.

[실험]

#include 
#include 

int char_cnt(char *ptr, char ch){
  int i = 0;
  while(*ptr){
   if(*ptr++ == ch)  i++;
  }
  return(i);
}

int main(void) {        
    int cnt=0;  
    cnt = char_cnt("hello World",'o');
    
    printf("%d \n",cnt);  
    return 0;
}

"hello World"라는 문자열에서 'o'라는 글자가 몇개 들어 있는지 카운트를 해볼까요.

눈을 보면 딱 2개가 보이네요. 정상적으로 카운트 한 결과가 2인지 보도록 하겠습니다.

[결과]

alt

2. 문자열 카운트


이제는 특정 문자열이 해당 문자여에서 몇번 들어있는지 확인해 보겠습니다.

[문자열 카운트 세기]

int str_cnt(char ptr1[], char ptr2[])
{
  int i, j, k;
  int count = 0;
  for(i=0; ptr1[i] != NULL; i++)
  for(j=i, k=0; ptr2[k] == ptr1[j]; k++, j++)
   if(ptr2[k+1] == NULL){
    count++;
    break;
  }
  return ((count == 0) ? -1 : count);
}

앞에서 특정 문자를 비교하여 카운트 했다면 이번에는 문자열을 비교하여 카운트를 해보도록 하겠습니다. 앞에서 코딩한 내용을 변경하여 문자열 비교로 바꿔 볼까요.

기존에는 한글자 비교였지만 여기에서는 for문을 이용하여 여러 글자를 비교하는 카운트를 셀 수 있습니다. for문은 첫글자가 일치하면 그 다음 글자가 일치하는지 즉 null문자가 나올때까지 비교하여 카운트를 세게 ㅗ딥니다.

그럼 위 코딩이 정상적으로 출력 되는지 살펴보도록 하겠습니다.

[실험]

#include 
#include 

int str_cnt(char ptr1[], char ptr2[])
{
  int i, j, k;
  int count = 0;
  for(i=0; ptr1[i] != NULL; i++)
  for(j=i, k=0; ptr2[k] == ptr1[j]; k++, j++)
   if(ptr2[k+1] == NULL){
    count++;
    break;
  }
  return ((count == 0) ? -1 : count);
}
int main(void) {
    // your code goes here
    
    int cnt=0;
    cnt = str_cnt("hello hello World","hello");
    
    printf("문자열 카운트 : %d \n",cnt);
    return 0;
}

[결과]

alt

마무리


문자와 문자열을 비교 체크하여 카운트를 세는 실험을 해보았습니다. 추가로, 이 원리를 이용하여 특정 문자열이 있는지 찾을 수 있고 어느 위치에 있는지도 알아 낼 수 있습니다.


Sponsored ( Powered by dclick )

dclick-imagead

[C언어] 문자열 카운트 | Ecency