2011-02-05 3 views
0

배열에 5 개의 다른 번호를 입력하는 프로그램이 있습니다. 나는 숫자가 한 번 이상 입력되지 않도록하는 방법을 찾는 데 어려움을 겪고있다. 누군가 제발 나를 도울 수 있을까요, 아니면 적어도 올바른 방향으로 나를 가르쳐 줄 수 있습니까? 그것이 C++에서라면 도움이된다.숫자가 고유한지 비교 하시겠습니까?

답변

3

std::set 또는 (사용되는 숫자에 따라) std::map을 사용할 수 있습니다.

std::set이 가장 좋은 방법 같습니다.

0

글쎄, 한 가지 방법은 각 번호를 배열에 추가 할 때 체크를 실행하는 것입니다. 따라서 기존 배열이 3 8 15 9이고 번호를 삽입하기 전에 이전 항목 중 하나와 같지 않은지 확인하십시오.

-2

배열을 가지고 있으므로 루프를 돌면서 현재 숫자가 배열의 숫자와 일치하는지 확인하십시오. 그렇다면 첫 번째 일치에서 true를 반환하고 숫자를 건너 뜁니다.

// pass the array and the number you are checking for existence 
int isRepeating(int *array, int unique) 
{ 
    int i, l = sizeof(array)/sizeof(int); // find size of the array 

    // loop thru the array and match any value 
    for (i = 0; i < l; i++) 
    { 
     // if matches, return positive 
     if (a[i] == unique) return true; 
    } 

    // otherwise return negative 
    return false; 
} 

int main(int argc, char *argv[]) 
{ 
    // out array of existing numbers 
    int array[5] = {1, 2, 3, 4, 5}; 

    // the number we want to insert 
    int nextOne = 3; 

    // we check it its already in existence, if so, take appropriate actions 
    if (isRepeating(array, nextOne)) { 
     std::cout << "Oops, number " << nextOne << " is already in existence." << std::endl; 
    } 

    // your logic here 

    return 0; 
} 

추신 : 아래

몇 가지 예제 코드입니다 나는 set() 솔루션을 정말 좋아한다.

+1

코드가 깨졌습니다.'sizeof' 트릭은 스택 할당 배열에서만 작동합니다.이 경우'int * array' 대신'int array []'를 전달해야합니다. C++을 사용한다면, 정말로 그 대신에'std :: vector '을 사용해야합니다. –

+0

의견을 보내 주셔서 감사합니다. 네, 맞습니다, 내 코드가 깨졌고 이벤트 컴파일되지 않습니다 (a [i]는 array [i] 여야합니다). 그 정말로 늦었 던 (4AM) 나는 피곤하다. 또한 포인터의 배열 크기를 얻을 수있는 방법이 없으므로 1이 될 것이고, 예제로만 제공하기 위해 의도 된 것입니다 (실제로는 잘못된 것입니다). 벡터를 사용할 수는 있지만 질문은 배열에 관한 것이므로이 질문에 사용자가 숙제를하고 있다고 가정했습니다. 그러나, 나는 실례가 아닌 게시를위한 부정적인 투표를받을 가치가있다. :) – ludesign

관련 문제