Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 3

Развернуть слова в строчке которую ввел пользователь

03.01.2016, 12:44. Показов 1642. Ответов 10

Студворк — интернет-сервис помощи студентам
В общем, надо написать программу которая разворачивает слова в строчке которую ввел пользователь, при этом
что бы все "НЕ буквы" т.е. "символы" оставались на своих же позициях.
Пример: при5Н! ода2 вил => Нир5п! адо2 лив

Порыл в интернете и нашел вроде бы подходящий алгоритм решения:
1) разрываешь фразу на слова
2) пишешь метод который данное слово переворачивает(тут надо вставить карусель(условие) которая не трогает символы)
3) скармливаешь в метод слово за словом
4) перевернутые слова склеиваешь в новую фразу.. .

1-й вопрос: Если использовать такой способ то я правильно понял что надо использовать Scanner для ввода, потом split для разделения, потом метод reverse()(кажется тут должно быть условие для того что бы оно не трогало символы) и потом склеить все это дело?

2-й вопрос: Укажите на ошибки или подскажите можно ли реализовать это проще и удобнее, если да, то как?
Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2016, 12:44
Ответы с готовыми решениями:

Как поменять с помощью map значения ячейки, которую ввел пользователь?
Есть двухмерный массив char array = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'} }; Пользователь...

Switch: посчитать, сколько раз пользователь ввел буквы (a, e, i, o, u) и (A, E, I, O, U)
задание такое: Написать программу, которая просит у пользователя ввести буквы до тех пор, пока не встретится знак $, затем программа...

Определение функции которую ввел пользователь
Подскажите пожалуйста, как можно определить какую функцию ввел пользователь?

10
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
03.01.2016, 14:11
Цитата Сообщение от Himakan5s Посмотреть сообщение
"НЕ буквы" т.е. "символы"
по моему в Вашем примере цифры остаются на своих местах
0
 Аватар для up777up
1 / 1 / 0
Регистрация: 03.11.2014
Сообщений: 43
03.01.2016, 14:13
Только непонятно, зачем разрывать строку на слова - можно же работать со строкой целиком. Вот наверно, что вам надо.

Заглавные буквы в строчные.
0
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 3
03.01.2016, 14:53  [ТС]
Правильно, цифры тоже остаються на местах, цифры же входят в множество "Не буквы"
0
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
03.01.2016, 17:26
Цитата Сообщение от Himakan5s Посмотреть сообщение
1-й вопрос: Если использовать такой способ то я правильно понял что надо использовать Scanner для ввода, потом split для разделения, потом метод reverse()(кажется тут должно быть условие для того что бы оно не трогало символы) и потом склеить все это дело?
Himakan5s, алгоритм вроде ничего..., проблема состоит в написании метода reverse()...у меня не получилось на скорую руку.

Цитата Сообщение от Himakan5s Посмотреть сообщение
надо использовать Scanner для ввода
разве тут главное ввод???
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
03.01.2016, 18:32
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
import java.util.Scanner;
 
public class SmartReverse {
    static void reverse_parth(char[] array, int startPos, int endPos) {
        for ( ; startPos < endPos; ++startPos, --endPos ) {
            char tmp = array[startPos];
            array[startPos] = array[endPos];
            array[endPos] = tmp;
        }
    }
    
    static String smartReverse(String s) {
        char[] arr = s.toCharArray();
        int head = 0;
        
        while ( head < arr.length ) {
            if ( ! Character.isLetter(arr[head]) )
                ++head;
            else {
                int tail = head + 1;
                while ( ( tail < arr.length ) && ( Character.isLetter(arr[tail]) ) )
                    ++tail;
                reverse_parth(arr, head, tail - 1);
                head = tail + 1;
            }
        }
        
        return new String(arr);
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        while ( true ) {
            System.out.print("String: ");
            String s = scanner.nextLine();
            if ( "".equals(s) )
                break;
            System.out.println("Result: " + smartReverse(s));
        }
    }
}
0
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
03.01.2016, 20:49
Цитата Сообщение от Himakan5s Посмотреть сообщение
Пример: при5Н! ода2 вил => Нир5п! адо2 лив
easybudda, так у меня тоже получилось сделать, но автор давал пример что я привел выше...обратите внимание как первое слово преобразовуется. Можно ли так сделать? У меня не получается...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
03.01.2016, 20:55
kozak95, ну можно и так сделать по-тупому вложенными циклами. Внешний по символам-разделителям, вложенный по началу и концу отрезка, выделенного внешним циклом, пропуская символы не являющиеся буквами.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    static void reverse_parth(char[] array, int startPos, int endPos) {
        while ( startPos < endPos ) {
            if ( ! Character.isLetter(array[startPos]) )
                ++startPos;
            else if ( ! Character.isLetter(array[endPos])
                --endPos;
            else {
                char tmp = array[startPos];
                array[startPos] = array[endPos];
                array[endPos] = tmp;
                ++startPos;
                --endPos;
            }
        }
    }
Как-то так...
0
34 / 34 / 21
Регистрация: 01.11.2013
Сообщений: 319
03.01.2016, 21:39
easybudda, По моему работает так как и прошлый метод...
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
03.01.2016, 22:41
Цитата Сообщение от kozak95 Посмотреть сообщение
По моему работает так как и прошлый метод...
Вообще не компилируется - там скобка пропущена
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
import java.util.Scanner;
 
public class SmartReverse {
    static final String WORD_BREAKERS = " .,;:!?\t"; // Добавить по вкусу
    /*
    static void reverse_parth(char[] array, int startPos, int endPos) {
        for ( ; startPos < endPos; ++startPos, --endPos ) {
            char tmp = array[startPos];
            array[startPos] = array[endPos];
            array[endPos] = tmp;
        }
    }
    */
    static void reverse_parth(char[] array, int startPos, int endPos) {
        while ( startPos < endPos ) {
            if ( ! Character.isLetter(array[startPos]) )
                ++startPos;
            else if ( ! Character.isLetter(array[endPos]) )
                --endPos;
            else {
                char tmp = array[startPos];
                array[startPos] = array[endPos];
                array[endPos] = tmp;
                ++startPos;
                --endPos;
            }
        }
    }
    
    /*
    static String smartReverse(String s) {
        char[] arr = s.toCharArray();
        int head = 0;
        
        while ( head < arr.length ) {
            if ( ! Character.isLetter(arr[head]) )
                ++head;
            else {
                int tail = head + 1;
                while ( ( tail < arr.length ) && ( Character.isLetter(arr[tail]) ) )
                    ++tail;
                reverse_parth(arr, head, tail - 1);
                head = tail + 1;
            }
        }
        
        return new String(arr);
    }
    */
    
    static String smartReverse(String s) {
        char[] arr = s.toCharArray();
        int head = 0;
        
        while ( head < arr.length ) {
            if ( WORD_BREAKERS.indexOf(arr[head]) >= 0 )
                ++head;
            else {
                int tail = head + 1;
                while ( ( tail < arr.length ) && ( WORD_BREAKERS.indexOf(arr[tail]) == -1 ) )
                    ++tail;
                reverse_parth(arr, head, tail - 1);
                head = tail + 1;
            }
        }
        
        return new String(arr);
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        while ( true ) {
            System.out.print("String: ");
            String s = scanner.nextLine();
            if ( "".equals(s) )
                break;
            System.out.println("Result: " + smartReverse(s));
        }
    }
}
1
0 / 0 / 0
Регистрация: 03.01.2016
Сообщений: 3
04.01.2016, 16:47  [ТС]
Большое спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.01.2016, 16:47
Помогаю со студенческими работами здесь

Подсчитать количество букв А в строке, которую ввел пользователь
Я хочу написать программы, которая считала бы количество букв А в строке, которую ввел пользователь. Но результат работает некорректно. ...

Ввел ли пользователь число
Наверно, 300 раз задавали этот вопрос.Как узнать ввел число пользователь ? isdigit что-то у меня чудить.

Определить, какую скобку ввел пользователь
Нужно проверить правельно ли сделана. Program number17; var s:char; begin Write('Введите скобку (отрытую или...

Определить, сколько чисел ввел пользователь
Напишите программу, которая запрашивает у пользователя числа до тех пор, пока каждое следующее число больше предыдущего. В конце программа...

Определить количество переменных, которые ввел пользователь
Здравствуйте, господа. В общем, дело такое. Пользователь должен ввести в консольке a, b и c (последнее по надобности), а программа должна...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 09.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru