메뉴 건너뛰기

리소스를 자유롭게 사용할 수 있도록 공유하는 곳

선언문은

bool strtakenumber(char * buffer, int size);
bool strtakenumber(char * buffer);

이고
정의문은

bool strtakenumber(char * buffer, int size)
{
 // 숫자 이외의 부분 골라서 지우는 알고리즘
 // 만든 이 : A.미스릴
 // http://hondoom.com/
 // http://blog.naver.com/hanpcship/
 int i, j;
 size += 1; // 기본적으로 널 문자는 무시되기 때문에 실제로 1 더 더해준다
 // 일단 안바뀐 상태
 bool bool_changed = false;
 for ( i=0; (i<size && buffer[i] != '\0') ; i+=1 )
 {
  if ( buffer[i] < '0' || buffer[i] > '9' )
  {
   // 숫자가 아닌 코드 발견(48~57은 각각 숫자 0~9를 의미함)
   // 어머 지워야겠네?
   // 루프 조건은 일정한 사이즈를 넘기지않고 \0(널문자)이 발견안되면
   for ( j=i+1; (j<size && buffer[j] != NULL) ; j+=1 )
   {
    // 앞쪽으로 1칸씩 수들을 모조리 끌어당김
    buffer[j-1] = buffer[j];
   }
   buffer[j-1] = '\0';
   bool_changed = true;
   i -= 1;
  }
 }
 return bool_changed;
}

bool strtakenumber(char * buffer)
{
 return strtakenumber( buffer, strlen(buffer) );
}

입니다.
잘쓰세요.
예시1 ) "345abc" => "345"
예시2 ) "1a2s3df4" => "1234"
예시3 ) "씨8아!" => "8"

조회 수 :
8748
등록일 :
2009.07.31
01:37:07 (*.176.2.2)
엮인글 :
게시글 주소 :
https://hondoom.com/zbxe/index.php?mid=graphic&document_srl=289400

똥똥배

2009.07.31
02:43:41
(*.239.144.157)
if ( buffer[i] < 48 || buffer[i] > 57 ) 이 부분에서 아스키 값을 직접 적어줄 필요없이
if ( buffer[i] < '0' || buffer[i] > '9' ) 식으로 적으면 훨씬 가독성이 높아질거라 봅니다.

널도 \0보다는 NULL이라고 적는 편이 좋다고 생각합니다.

A.미스릴

2009.08.01
01:05:38
(*.176.2.2)
수정완료
List of Articles