2010-07-30 4 views
1

다음은 프로그래밍 진주 문자열의 함수입니다.프로그래밍 진주의 문자열 함수

int wordncmp(char *p, char* q) 
{ int n = k; 
    for (; *p == *q; p++, q++) 
     if (*p == 0 && --n == 0) 
      return 0; 
    return *p - *q; 
} 

int sortcmp(char **p, char **q) 
{ return wordncmp(*p, *q); 
} 

char *skip(char *p, int n) 
{ for (; n > 0; p++) 
     if (*p == 0) 
      n--; 
    return p; 
} 

sortcmp()는 무엇을하는지 모르겠습니까? 그리고 건너 뛰기 함수는 char * p 또는 무엇에서 null이 아닌 종료 된 부분을 반환합니까? 설명해주십시오.

+1

wordncmp()에서 int n은 알 수없는 변수 또는 상수 k로 초기화됩니다. 그것은 설명이 필요합니다. – Johan

+0

코드에서 n = k = 2는 –

+0

입니다. 이러한 기능은 그대로 - 쓰레기입니다. 올바르게 복사 했습니까? 요한이 말했듯이,'k'는 무엇입니까? 또한'skip' 함수는 무의미하며 작동하지 않습니다. 항상 p의 종료 문자로갑니다. 'n -'문은 그 위치에 아무 것도하지 않습니다. –

답변

2

책의 사본이 없으므로 이것은 완전히 추측입니다. 그러나이 기능은 널 문자로 구분 된 일련의 "단어"로 구성된 틀에 얽매이지 않는 문자열 형식으로 작동하는 것처럼 보입니다. k 함수를 호출하기 전에 설정되는 글로벌 변수이고 아마도

  • wordncmp()는 제 k 단어를 비교한다.
  • sortcmp()은 문자열 포인터에 대한 포인터를 사용하며 qsort()을 사용하여 문자열 포인터의 배열을 정렬 할 때 아마도 비교기로 사용됩니다.
  • skip() 문자열에서 n 개의 단어를 건너 뜁니다.

C++에서 이런 종류의 작업을 수행하려면 표준 String 및 Algorithms 라이브러리를 사용하는 것이 좋습니다. 포인터와 틀에 얽매이지 않는 문자열 표현을 뒤적 거리는 좋은 이유는 거의 없습니다.

+0

+1 : 나에게 잘 어울립니다. –

+0

커널은 어떤 syscall에서 이와 같은 문자열의 "packed arrays"를 반환하는데, 특히 ioctl/sysctl과 같이 "못 생겼습니다". AIX는 특히 이런 종류의 형식을 선호합니다. 끝은 이중 널로 종료됩니다. –

0

sortcmp는 인수로 double pointer (char **)를 사용하지만 wordncmp는 인수로 사용되지 않습니다. 그래서 sortcmp는 double pointer (char **)를 사용하여 wordncmp를 호출하는 방법입니다. 그것은 오버로드 기능과 같습니다.

건너 뛰기는 당신이 쓴 무엇을 수행합니다

스킵 기능의 char * 피에서 null 이외 종료 부품을 반환

0

내가 sortcmp() 수익을 추측 0 매개 변수 pq에서이 동일한 경우 또는 pq보다 작은 경우 양수 값이거나 pq보다 큰 경우 음수 값입니다. 이는 정렬 알고리즘을 구현할 때 유용한 기능입니다.

관련 문제