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;
}
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;
}
В статическом массиве не бывает удалений. Может быть только замена элемента на другое значение.
И в чем проблема? Написать условие, которое сверяет каждый повторяющийся цикл. Коли нельзя динамический, используйте статический - никакой разницы.
Если хотите без массива, как вариант прогнать весь цикл по количеству элементов.
Если проблема в создании нового массива, можно просто создать новый записав нужные значения, а старый удалить.
Если хотите без массива, как вариант прогнать весь цикл по количеству элементов.
Если проблема в создании нового массива, можно просто создать новый записав нужные значения, а старый удалить.
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;
}
}
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;
}
}
А не рациональнее ли отбрасывать повторы в процессе ввода???
Поскольку класс string является случаем динамического массива, то остаётся использовать Си-строку (тип char* ). Также можно подключить заголовочную библиотеку string.h и использовать функцию strchr(). Если функция вернёт NULL, то добавить введённый символ к строке.
Для посимвольного ввода лучше использовать метод cin.get(), он считывает ровно ОДИН символ. За один раз можно ввести всю строку ввиду буферизации ввода, а потом cin.get() будет считывать из буфера.
Поскольку класс string является случаем динамического массива, то остаётся использовать Си-строку (тип char* ). Также можно подключить заголовочную библиотеку string.h и использовать функцию strchr(). Если функция вернёт NULL, то добавить введённый символ к строке.
Для посимвольного ввода лучше использовать метод cin.get(), он считывает ровно ОДИН символ. За один раз можно ввести всю строку ввиду буферизации ввода, а потом cin.get() будет считывать из буфера.
Эльбрус
Если придерутся к объявлению строковой переменной, то просто перенесите это объявление выше заголовка функции main(). Хотя с принципиальной точки зрения это неважно.
Похожие вопросы
- Функция, которая вставляет новый элемент до каждого вхождения заданного элемента
- Определить встречается ли в последовательности группа букв 'one', определить последнее вхождение этой группы
- Как узнать количество символов в UTF8 массиве?(Си)
- Ввести с клавиатуры символ и преобразовать его в символ верхнего регистра. Как сделать без библиотеки string?
- Если указатель уже объявлен как указатель то при повторном объявлении мы обращаемся не к указателю а к адресу ссылки?
- Отображение символов UTF8 в консоли Windows. (Си)
- Ошибка с русскими символами в языке C++ программе xcode. Пропадает если указать большее количество элементов в строке.
- Нужно написать программу вхождения точки в круг, при этом рассмотреть отдельно на границе и за пределами
- Как запретить ввод символов? С++
- Сравнение элементов массива типа char с символом типа char
#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();
}