#include <iostream>
using namespace std;
// Chapter 5. 2번문제 설계 계획 =>
// 2개의 for 문을 사용해서 처음 for문을 위해 사용 할 때 쓰이는 'i' 값을
// 인수로 갖는 배열 a[i] 값을 기준으로
// i보다 크고 size값보다 작은 j를 인수로 갖는 a[j]와 비교한다.
// 그리고 a[j]와 a[i] 가 같으면 a[j] 를 빈값으로 나둔다.
// 빈 값으로 나두기 위해서 a 배열을 j번째 요소~ size번 째 요소 를 왼쪽으로 댕긴다. (a[0] 을 1번째로 봤을때.)
// 왼쪽으로 당기기 위해서 deleteValue 함수를 사용한다.
void deleteRepeats(char a[], int size);
// 이 함 수는 '배열 a'와 배열의 실제 값이 들어있는 'size' 를 인수를 받아서
// a안에 들어 있는 반복되는 값을 제거하는 함수이다.
// return 하는 것은 없지만 인수로 쓰인 a의 값을 바꾸는 것을 기능한다.
int sizeOfArray(char a[]);
// 이 함수는 배열 a를 받고 a배열 안의 a[0]부터 검사하면서
// 값이 없을 떄까지 의 수를 return 하는 함수이다.
// 배열의 사이즈를 알기 위해 사용된다.
void deleteValue(char a[], int size, int index);
// 값을 지우고 싶은 배열과, 그 배열의 크기, 그리고 지우고 싶은 배열 요소의 인덱스값을 받아온다.
// 인덱스 값~size 까지의 모든 배열을 for문을 통해서 a[i] = a[i + 1] 식으로 모든 값들을 왼쪽으로 옮긴다.
int main()
{
char a[10] = {'a', 'b', 'a', 'c', 'a', '3', 'a', 'b', 'd'};
int size = sizeOfArray(a); //4
deleteRepeats(a, size);
cout << a << endl;
return 0;
}
int sizeOfArray(char a[])
{
int size = 0;
while (a[size])
{
size++;
}
return size;
}
void deleteRepeats(char a[], int size)
{
for (int i = 0; i < size; i++)
{
for (int j = i + 1; j < size; j++)
{
if (a[i] == a[j])
{
deleteValue(a, size, j);
}
}
}
}
void deleteValue(char a[], int size, int index)
{
for (int i = index; i < size; i++)
{
a[i] = a[i + 1];
}
}