Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 2
Регистрация: 26.11.2012
Сообщений: 54

Удалить повторяющиеся элементы из текста

26.11.2012, 17:01. Показов 4895. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан файл, содержащий текст на русском языке. В предложениях некоторые из слов записаны подряд. Получить в новом файле отредактированный текст, в котором удалены повторные вхождения слов в предложение.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private static IEnumerable<string> RemoveDoubles(string input)
        {
            List<string> set = new List<string>(), doubles = new List<string>();
            string[] words = input.Split(new[] {' ', ','} , StringSplitOptions.RemoveEmptyEntries);
            foreach (string word in words)
                if (set.Contains(word))
                    doubles.Add(word);
                else
                    set.Add(word);
            return words.Where(s => !doubles.Contains(s));
        }
 
private static void Main(string[] args)
        {
            StreamReader reader = new StreamReader("d:\\log.txt");          
            string str = reader.ReadToEnd();
            reader.Close();
            string input = str;
            var result = RemoveDoubles(input);
            foreach (string s in result)
                Console.Write(s);
            Console.WriteLine("\t");
            Console.WriteLine(str);
            Console.ReadKey();
        }
Не смог довести до ума, не получается удалять повторяющиеся элементы без удаления знаков и пробелов + удаляет пока только все одинаковые элементы, а нужно - только повторы элементов.
Сможет кто помочь?)

Добавлено через 9 минут
Разобрался с возвращением уникального значения

C#
1
return words.Distinct().ToList();
Осталось понять как удалять повторения без удаления знаков и пробелов.

Добавлено через 4 часа 40 минут
Понял что ещё нужно правильно вписать функцию Join, для восстановления пробелов.

Может кто сделать, а то у меня не получается.

Добавлено через 1 час 4 минуты
C#
1
2
3
4
        private static string add(string[] input)
        {
            return string.Join(" ", input);
        }

По идее должно возвращать пробелы, но не работает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.11.2012, 17:01
Ответы с готовыми решениями:

Удалить повторяющиеся элементы массива
Нужно удалить повторяющиеся элементы массива, оставляя только первое вхождение. Использовать коллекции, очереди нельзя. Массив вводится...

Удалить из массива повторяющиеся элементы
Дан массив размерностью 20*15, заполненый случайными числами long int. отсортировать по убыванию пузырьковым методом и удалить из массива...

Удалить повторяющиеся элементы строки
Пусть дана строка, состоящая из слов, отделенных друг от друга одним и более пробелами. Сформировать новую строку, состоящую из слов...

6
Не осилил Linux
 Аватар для =OutlaW=
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
26.11.2012, 19:32
попробуй так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    class Program
    {
        static void Main(string[] args)
        {
            string s = /*исходная строка*/ "ff ff ff gg hhh hhh kk kk.kk,kk";
            var words = s.Split(new[] {' ', ',', '.'});
            foreach (var temp in words.GroupBy(_ => _)
                .Where(g => g.Count() > 1)
                .Select(g => g.Key))
            {
                var firstIndex = s.IndexOf(temp);
                s = s.Replace(temp, "");
                s = s.Insert(firstIndex, temp);
            }
            Console.WriteLine(s);
            Console.Read();
        }
    }
написал за 5 минут практически на коленке, может и не работать.
0
0 / 0 / 2
Регистрация: 26.11.2012
Сообщений: 54
26.11.2012, 23:30  [ТС]
Отлично работает, спасибо!
А можно ли как то использую мой код, но дописав Join?
0
Не осилил Linux
 Аватар для =OutlaW=
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
27.11.2012, 10:21
Цитата Сообщение от BaHXeLiSiHg Посмотреть сообщение
А можно ли как то использую мой код, но дописав Join?
Должно работать. Может неправильно используется метод add.
Покажи полный код, с вызовом add.

string[] в параметре лучше поменять на IEnumerable<string>, чтобы не только массив можно было передавать.
0
0 / 0 / 2
Регистрация: 26.11.2012
Сообщений: 54
27.11.2012, 11:21  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
 
namespace ConsoleApplication1
{
    internal class Program
    {
        private static IEnumerable<string> RemoveDoubles(string input)
        {
            List<string> set = new List<string>(), doubles = new List<string>();
            string[] words = input.Split(new[] { " ", "," }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string word in words)
                if (set.Contains(word))
                    doubles.Add(word);
                else
                    set.Add(word);
            //string add = string.Join(" ", words);
            return words.Distinct().ToList();
        }
 
            private static string add(string[] words)
        {
            
            return string.Join(" ", words);
        }
 
        private static void Main(string[] args)
        {
            StreamReader reader = new StreamReader("d:\\log.txt");
            string str = reader.ReadToEnd();
            reader.Close();
            string input = str;
            var result = RemoveDoubles(input);
            foreach (string s in result)
                Console.Write(s);
            Console.WriteLine("\t");
            Console.WriteLine("----------------");
            Console.Write(str);
            Console.ReadKey();
        }
    }
}
Вот что есть на данный момент.
Скорее всего не правильно задал метод Join.
Осталось с ним разобраться и ещё, желательно, игнорирование регистра букв добавить ((
0
Не осилил Linux
 Аватар для =OutlaW=
267 / 61 / 6
Регистрация: 06.08.2009
Сообщений: 223
27.11.2012, 11:55
а так? без Join'a
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
 
namespace ConsoleApplication1
{
    internal class Program
    {
        private static IEnumerable<string> RemoveDoubles(string input)
        {
            List<string> set = new List<string>(), doubles = new List<string>();
            string[] words = input.ToLower().Split(new[] { " ", "," }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string word in words)
                if (set.Contains(word))
                    doubles.Add(word);
                else
                    set.Add(word);
            return AddSpaces(words.Distinct());
        }
 
        private static IEnumerable<string> AddSpaces(IEnumerable<string> words)
        {
            return words.Select(s => s + ' ');
        }
 
        private static void Main(string[] args)
        {
            StreamReader reader = new StreamReader("d:\\log.txt");
            string str = reader.ReadToEnd();
            reader.Close();
            string input = str;
            var result = RemoveDoubles(input);
            foreach (string s in result)
                Console.Write(s);
            Console.WriteLine("\t");
            Console.WriteLine("----------------");
            Console.Write(str);
            Console.ReadKey();
        }
    }
}
1
0 / 0 / 2
Регистрация: 26.11.2012
Сообщений: 54
27.11.2012, 12:01  [ТС]
Потрясающе!!
Спасибо Вам огромное, то что нужно на 100%!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2012, 12:01
Помогаю со студенческими работами здесь

Удалить из массива повторяющиеся элементы
Удалить из массива повторяющийся элементы,оставив только из первые вхождения!

Удалить все повторяющиеся элементы массива
1) Удалить все повторяющиеся элементы массива, оставив только их первые вхождения, то есть получить массив различных элементов 2) Удалить...

Как удалить из массива повторяющиеся элементы
Собственно сабж - как сделать так, чтобы удалялись все повторяющие элементы, кроме одного? А невпоторяющиеся, соответсвенно, оставались.

Удалить из нелинейного списка все повторяющиеся элементы
помогите решит задачку плииииз! срочно ! Удалить из нелинейного списка все повторяющиеся элементы (м.б., не атомы).

Удалить все повторяющиеся элементы из массива и сжать его
Задача такова: нужно удалить все повторяющиеся элементы, массив сжать вот код, но он работает не корректно, подскажите пожалуйста, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru