C/C++

Как удалить повторные вхождения каждого символа?

Задан массив из k символов. Необходимо удалить из него повторные вхождения каждого символа (Ввод должен быть с клавиатуры и без использования динамического массива. Язык C++)
#include < iostream >
using namespace std;

void sdvig(char arr[100], int position)
{
while (true)
{
arr[position] = arr[position + 1];
if (arr[position] == '\0') return;
position++;
}
}

int main()
{
const int k = 100;
char filter[256]{};
char str[k];
cin.getline(str, k);
int i = 0;
while(true)
{
if (str[i] == '\0') break;
if (!filter[str[i]]) filter[str[i]] = str[i]; else sdvig(str, i--);
i++;
}
cout << str;
}
Юрий Мильто
Юрий Мильто
51 411
Лучший ответ
В статическом массиве не бывает удалений. Может быть только замена элемента на другое значение.
ПИ
Павел Ивкин
37 945
И в чем проблема? Написать условие, которое сверяет каждый повторяющийся цикл. Коли нельзя динамический, используйте статический - никакой разницы.
Если хотите без массива, как вариант прогнать весь цикл по количеству элементов.
Если проблема в создании нового массива, можно просто создать новый записав нужные значения, а старый удалить.
Вячеслав Папшин На данный момент у меня есть это, но работает не верно. Буду благодарен, если исправите недочёты в коде:

#include
#include

using namespace std;

void main()
{
const int n = 10;
int m[n];
for (int i = 0; i < n; i++)
{
cout << "Vvedite element: ";
cin >> m[i];
}

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

}

for (int i = 0; i < n; i++)
cout << m[i];

_getch();
}
string str= "To be or not to be. That is the question!";
cout << str << endl;

char smb; int pos;

while (!str.empty())
{
cin.get(smb);
pos= str.find(smb);

if (pos != str.npos)
{
str.erase(pos, 1);
cout << str << endl;
}
}
Сергей Ишков
Сергей Ишков
21 700
   А не рациональнее ли отбрасывать повторы в процессе ввода???

   Поскольку класс string является случаем динамического массива, то остаётся использовать Си-строку (тип char* ). Также можно подключить заголовочную библиотеку string.h и использовать функцию strchr(). Если функция вернёт NULL, то добавить введённый символ к строке.

   Для посимвольного ввода лучше использовать метод cin.get(), он считывает ровно ОДИН символ. За один раз можно ввести всю строку ввиду буферизации ввода, а потом cin.get() будет считывать из буфера.
Эльбрус
Эльбрус
16 172
Эльбрус Если придерутся к объявлению строковой переменной, то просто перенесите это объявление выше заголовка функции main(). Хотя с принципиальной точки зрения это неважно.

Похожие вопросы