2017-02-18 1 views
0

이 텍스트 내가 작성한 파일 : 나는 인접한 중복 문자열을 제거하기 위해 노력하고인접한 중복 문자열을 문자열 배열에서 제거 하시겠습니까?

this is the first line 
this is the first line 
this is the second line 
this is the second line 
this is the second line 
this is the third line 
this is the first line 

때문에 출력은 다음과 같습니다

this is the first line 
this is the second line 
this is the third line 
this is the first line 

이것은 내가 지금까지 쓴 것입니다 :

:
for(int i = 0; i < n; i++) 
getline(infile,arr[i]); 

for(int i=0; i<n; i++) 
{ 
     int j = i+1; 
     if(arr[i] == arr[j]) 
     { 
       for(int k = i; k<n; k++) 
       arr[k] = arr[k+1]; 
       n--; 
     } 
} 

내가 얻을 출력3210

해결 방법? 추신 : 반복적으로 해결해야하므로이 방법을 사용하려고합니다.

+0

'arr'의 유형은 무엇입니까? –

+0

STL을 아십니까? –

+2

이러한 문제를 해결하는 올바른 도구는 디버거입니다. 스택 오버플로를 묻기 전에 코드를 단계별로 실행해야합니다. 자세한 도움말은 [작은 프로그램 디버깅 방법 (Eric Lippert 작성)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참조하십시오. 문제를 재현하는 [최소, 완료 및 확인 가능] (http://stackoverflow.com/help/mcve) 예제와 함께 해당 질문을 \ [편집]해야합니다. 디버거. –

답변

2

귀하의 문제가 발생합니다. 귀하의 경우, 이로 인해 문제가 발생합니다.

this is the second line 
this is the second line 
this is the second line 

문제는 한 번만 다음 요소로 줄 중복을 제거하는 것입니다.

예 : 당신이 4 개 라인이있는 경우 한 라인 1, 2, 3, 중복, 당신은 것입니다 :

  1. 2와 1을 비교 한 다음 1로 배열을 압축, 2를 제거, 3 당신이의 inc하지 않는

  2. 대신 3 일을 비교하는, 당신이 당신의 솔루션을 해결하기 위해

4 (잘못된)와 (3)을 비교로 이동 것입니다, 당신은 할 필요가 다음 요소 i+1과 일치하지 않을 때까지 i을 다시 입력하십시오.

i = 0; 
while (i < n) 
{ 
    int j = i+1; 
    if(arr[i] == arr[j]) 
    { 
     for(int k = i; k<n; k++) 
     { 
      arr[k] = arr[k+1]; 
     } 
     n--; 
    } 
    else 
    { 
     i++; 
    } 
} 
+0

정말 고마워요. 그래서 그렇게 그렇게 너무 너무 많이 !!!! :) :) :) – Stardust1992

0

std::unique을 사용하십시오. 같은 라인의 2 개 이상 중복이있을 때

auto end = std::unique(std::begin(arr), std::end(arr)); 
+0

미안하지만, 내가 언급 했어야했는데, 나는 이것을 사용할 수 없다. 나는 그것을 반복적으로해야만한다. 그래서 내가이 방법으로 노력하고있어, 나는 재귀를 사용할 수 없다. – Stardust1992

0
for(int i=0; i < count(original_array); i++) 
{ 
    if(i == 0) // check for first entry 
    { 
     new_array[] = original_array[i]; 
     temp = original_array[i]; 
    } 
    if(temp != original_array[i]) // check thereafter 
    { 
     new_array[] = original_array[i]; 
     temp = original_array[i]; 
    } 
} 
+0

'new_array [] = original_array [i];'이것은 전혀 컴파일되지 않습니다. –

+0

Hii 친구, 그 줄에서 나는 단지 새로운 배열에 오래된 가치를 넣으라고 말하고 싶었습니다 .... 코드는 특정 언어로 작성된 것이 아닙니다 ... 단지 논리입니다 ... –

+0

고맙습니다. 너무 일했습니다 :) – Stardust1992