2017-11-26 3 views
0

대괄호를 사용하지 않고 다음 함수 헤더를 사용하여 위의 프로그램을 작성하려면 어떻게해야합니까?포인터 (C++)를 사용하여 배열에서 요소가 처음 나타나는 경우

int findFirst(const string* a, int n, string target) 
+0

(* a == target)을 사용하여 a에서 요소에 액세스 할 수 있습니다. 그런 다음 포인터 연산 방식을 사용하여 a를 증가시킬 수 있습니다. a ++는 자동으로 다음 문자를 가리 킵니다. – KillPinguin

+0

http://www.cplusplus.com/reference/algorithm/find/ –

답변

1

단순히 기능 헤더를 바꿀 수 있습니다. const string a[]은 이미 포인터 매개 변수이며 정확히 const string* a과 동일 함을 의미합니다.

그런 다음, 다음 중 하나를 수행 할 수 있습니다 역 참조 i

for (int i = 0; i < n; i++, a++) 
    if (*a == target) 

또는 당신이 사용할 수있는 포인터 만 모든

for (const string* p = a; p < a + n; p++) 
    if (*p == target) 
0

먼저, 경우에 따라 a + i

for (int i = 0; i < n; i++) 
    if (*(a + i) == target) 

또는 증가 a inp로 포인터를 갖는 함수를 작성한다. 이 것,

#include <algorithm> 

int findFirst(const std::string* a, int n, std::string target) 
{ 
    if (a) 
    { 
     int res = std::distance(a, std::find(a, a + n, target)); 
     if (res < n) 
     { 
      return res; 
     } 
    } 
    return -1; 
} 

셋째, 당신이 표준 라이브러리에서 알고리즘을 사용할 수있는 항목의 위치를 ​​검색하기위한,

int findFirst(const string * a, int n, string target) 
{ 
    if (a) 
    { 
    // do search 
    } 
    return -1; 
} 

둘째, 유타 매개 변수는이 nullptr에이 포인터를 확인하기 위해 더 나은 (0) 것 복사 생성자의 불필요한 호출을 제외하기 위해 const 참조로 대상을 전달하는 것이 좋습니다. 결과적으로 다음과 같은 최종 솔루션을 얻을 수 있습니다.

#include <algorithm> 

int findFirst(const std::string* a, int n, const std::string& target) 
{ 
    if (a) 
    { 
     int res = std::distance(a, std::find(a, a + n, target)); 
     if (res < n) 
     { 
      return res; 
     } 
    } 
    return -1; 
}