0 / 0 / 0
Регистрация: 06.10.2019
Сообщений: 9
1

Дан текст из слов, разделенных знаками препинания

25.12.2019, 15:20. Показов 1511. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан текст из слов, разделенных знаками препинания. Определить, какое из слов встречается в строке раньше: с максимальным количеством гласных или согласных букв.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2019, 15:20
Ответы с готовыми решениями:

Дан текст из десяти слов, разделенных различными знаками препинания
Дан текст из десяти слов, разделенных различными знаками препинания. сформировать массив из слов,...

Дан символьный файл, содержащий произвольный текст длиной более 5000 слов. Слова разделены пробелами и знаками препинания. Получить 100 наиболее часто
НАРОД срочно нужно написать на паскале : Дан символьный файл, содержащий произвольный текст...

Дан текст из слов, разделенных пробелами. Найти самое длинное слова фразы и проверить, можно ли из букв этого слов
Помогите написать программу: Дан текст из слов, разделенных пробелами. Найти самое длинное слова...

Дан текст из слов, разделенных пробелами. Определить, где расположено самое длинное слово фразы
Дан текст из слов, разделенных пробелами. Определить, где расположено самое длинное слово фразы: в...

2
1021 / 561 / 185
Регистрация: 18.08.2013
Сообщений: 2,026
Записей в блоге: 2
25.12.2019, 21:42 2
Наверн я перестарался, но вот
Java
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
 
public class Test {
    public static void main(String[] args) {
        doThatThing("Mops, toast, ghost, tiddie, limb, burger, toad.");
        doThatThing("Mops, toast, tiddie, ghost, limb, burger, toad.");
        doThatThing("Mops, toast, ghost, aaaaabbbbb, tiddie, limb, burger, toad.");
    }
 
    private static void doThatThing(String line) {
        AtomicLong id = new AtomicLong();
 
        List<Word> list = Arrays.stream(line.split("[,. ]+"))
                .collect(Collectors.toMap(i -> id.incrementAndGet(), Function.identity())).entrySet().stream()
                .map(entry -> new Word(entry.getValue(), entry.getKey().intValue())).collect(Collectors.toList());
 
        Comparator<Word> posComp = Comparator.comparingInt(Word::getPos).reversed();
 
        Word maxConsonants = list.stream().max(Comparator.comparingInt(Word::getConsonants).thenComparing(posComp))
                .get();
        Word maxVowels = list.stream().max(Comparator.comparingInt(Word::getVowels).thenComparing(posComp)).get();
 
        if (maxConsonants.getPos() < maxVowels.getPos()) {
            System.out.println("??? " + maxConsonants);
        } else if (maxConsonants.getPos() > maxVowels.getPos()) {
            System.out.println("!!! " + maxVowels);
        } else {
            System.out.println("(  .  Y  .  ) " + maxVowels);
        }
    }
}
 
class Word {
    private int pos;
    private int vowels;
    private int consonants;
    private String word;
 
    public Word(String word, int pos) {
        this.word = word;
        this.pos = pos;
 
        vowels = countChars(word, "(?i)[eyuioa]");
        consonants = countChars(word, "(?i)[a-z&&[^eyuioa]]");
    }
 
    private static int countChars(String word, String regex) {
        int count = 0;
 
        Predicate<String> pred = Pattern.compile(regex).asMatchPredicate();
 
        for (String c : word.split("")) {
            if (pred.test(c))
                count++;
        }
 
        return count;
    }
 
    public int getPos() {
        return pos;
    }
 
    public int getVowels() {
        return vowels;
    }
 
    public int getConsonants() {
        return consonants;
    }
 
    public String getWord() {
        return word;
    }
 
    public String toString() {
        return word + "[pos=" + pos + ", consonants=" + consonants + ", vowels=" + vowels + "]";
    }
 
    public boolean equals(Object otherObject) {
        if (this == otherObject)
            return true;
        if (otherObject == null || this.getClass() != otherObject.getClass())
            return false;
 
        Word other = (Word) otherObject;
        return this.word.equals(other.getWord());
    }
 
    public int hashCode() {
        return word.hashCode() * 3 + 4;
    }
}
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
26.12.2019, 00:52 3
Я вымучил это, узнал что есть классная штука в предиката - negate(), и что мне нехватает такой штуки как .findFirst(Predicate<T>), будем ждать
Java
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
import java.util.Arrays;
import java.util.Comparator;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.stream.Stream;
 
public class FindSome2word{
 
    public static void main(String[] args){
        find("Mops, toast, ghost, tiddie, limb, burger, toad.");
        find("Mops, toast, tiddie, ghost, limb, burger, toad.");
        find("Mops, toast, ghost, aaaaabbbbb, tiddie, limb, burger, toad.");
    }
    public static void find(String string) {
        Supplier<Stream<String>> sup = () -> Arrays.stream(string.split("[,. ]+"));
        Predicate<String> pr = s -> "aoiueAOIUE".contains(s);
        Function<Predicate<String>,Function<String,Integer>> f = 
               p -> s -> (int)Arrays.stream(s.split("")).filter(p).count();
        Function<Predicate<String>,Comparator<String>> fc = 
               p -> (s1,s2) -> f.apply(p).apply(s1) - f.apply(p).apply(s2);
        String a = sup.get().max(fc.apply(pr)).get();
        String b = sup.get().max(fc.apply(pr.negate())).get();
        System.out.print("a = "+a+"\nb = "+b+"\nresult : ");
        System.out.println(sup.get().filter(i -> i.equals(a) || i.equals(b)).findFirst().get());
    }
}
Код
a = tiddie
b = ghost
result : ghost
a = tiddie
b = ghost
result : tiddie
a = aaaaabbbbb
b = aaaaabbbbb
result : aaaaabbbbb
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2019, 00:52
Помогаю со студенческими работами здесь

Дан текст, состоящий из слов, разделённых одним пробелом. Удалить из текста слова, в которых есть символ «а».
Дан текст, состоящий из слов, разделённых одним пробелом. Удалить из текста слова, в которых есть...

Вывести количество слов в предложении со знаками препинания
Нужно вывести количество слов в предложении со знаками препинания, н-р: Hello , World ! 2

Дан текст, состоящий из слов, разделенных произвольным числом пробелов. Удалить из текста лишние пробелы, оставив по одному между словами
Преобразования строк. Обработка строк с применением циклов Дан текст, состоящий из слов,...

Зашифровать текст, записанный русскими буквами и знаками препинания
Чтобы зашифровать текст, записанный с помощью русских букв и знаков препинания, его можно...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru