2013-10-31 4 views
0

문자 배열에서 중복을 제거 할 수있는 함수를 만들고 있습니다. 문제는 함수가 특정 수의 문자에 대해 작동하지만 배열에 많은 용어가 있으면 프로그램이 제대로 작동하지 않는다는 것입니다. 또한 중복 용어가 서로 옆에 있으면 프로그램에서 제거하지 않습니다.배열에서 동일한 용어 제거

void delete_repeats(char array[],int size){ 
    for(int i = 0; i < size; i++){ 
     for(int j = i + 1; j < size; j++){ 
      if(array[i] == array[j] || !((array[j] >= 97) && (array[j] <= 122))){ 
       for(int k = j; k < size; k++){ 
        array[k] = array[k + 1]; 
        size--; 
       } 
      } 
     } 
    } 
} 

예 :

원래의 배열이 포함되어 프로그램 후 Mary had a little lamp

이 실행 : maryhdliitttlelaampp

+3

을 진심으로, 무슨 일이 쓰기 제목에 C와 태그 C와 함께 요즘 달려 ++? 어떤 언어로 쓰는지 마음을 수정하십시오. – jrok

+0

글쎄, 최소한 사용자는 C 및 C++에 태그를 지정하지 않았습니다. – crashmstr

+2

오, 그리고 메리는 "램프"가 아니라 "양"을 가졌습니다. D – jrok

답변

0
외부 루프에 그 루프에서 크기를 이동

:

void delete_repeats(char array[],int size){ 
    for(int i = 0; i < size; i++){ 
    for(int j = i + 1; j < size; j++){ 
     if(array[i] == array[j] || !((array[j] >= 97) && (array[j] <= 122))){ 
      for(int k = j; k < size; k++){ 
       array[k] = array[k + 1]; 
      } 
      size--; 
     } 

    } 
    } 
} 

INPUT: Mary had a little lamb 
OUTPUT: Maryhdlitemb 

0

당신은 너무 자주 size을 감소시킨다. 배열의 내용을 이동 한 후 size을 줄입니다.