Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 22.06.2021
Сообщений: 5

Найти первое слово и переставить в конец

04.04.2024, 10:07. Показов 2767. Ответов 30

Студворк — интернет-сервис помощи студентам
Добрый день,

есть данные
"АО XXX YYY",
"ПАО FFFF ZZ",
"ООО GGGGG"

первое слово может быть 2 или 3 символа, далее может быть как одно слово так и несколько.

Надо найти первое слово до разделителя "пробел" и переставить его в конец, т.е. должно получиться

"XXX YYY АО",
"FFFF ZZ ПАО",
"GGGGG ООО"

для простоты можно взять только одно значение:
$string='ПАО FFFF ZZ'

Не соображу как это cделать.

Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.04.2024, 10:07
Ответы с готовыми решениями:

Переставить первое слово в конец строки
дана последовательность символов S. получить последовательность символов, которая получается при перестановке двух частей...

Переставить первое слово в конец строки
В задаче задается строка текста, состоящая из нескольких слов. Слова отделяются последовательностью пробелов. Переставить первое слово в...

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

30
 Аватар для volodin661
7097 / 2328 / 353
Регистрация: 10.12.2013
Сообщений: 8,054
05.04.2024, 17:13
Студворк — интернет-сервис помощи студентам
но уже понятно, что всё программирование переродится в декларативное общение с жэпэтэ.
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
05.04.2024, 21:26
alhaos, а я намекал на то, что неэффективно напускать цикл на строку, ибо посимвольный её разбор, в поисках индекса - не комильфо, при наличии метода .indexof, т.к. даже если присутствует прерывание цикла, то длина "первого" слова не ограничена ничем, а также количество строк тоже неизвестно.
А cry - это просто беззлобный юмор, типа "мокрый от слез" в противовес dry (сухой)... никаких аббревиатур я не знаю.
И да, для ускорения выполнения, конечно, предпочтительнее найденный индекс записывать в переменную, чем дважды его искать, согласен.

Добавлено через 3 минуты
Цитата Сообщение от volodin661 Посмотреть сообщение
всё программирование переродится в декларативное общение с жэпэтэ.
да погоди... если входной порог неизменно снижается, то сама гопота где будет код брать? Ну, программистов же не станет, а то, что код "пишется" - весьма сомнительно. Думаю, что жэпэтэ просто его тырит со всех доступных мест...
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
06.04.2024, 05:32
Цитата Сообщение от YuS_2 Посмотреть сообщение
я намекал на то, что неэффективно напускать цикл на строку, ибо посимвольный её разбор, в поисках индекса - не комильфо, при наличии метода .indexof,
ну это "особенности" powershell, что indexOf может работать эффективнее цикла по символам.
0
 Аватар для volodin661
7097 / 2328 / 353
Регистрация: 10.12.2013
Сообщений: 8,054
09.04.2024, 17:37
---
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
09.04.2024, 21:07
volodin661, наверное да.

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$datum = "_" * 100000000 + " "
 
$scriptBlock1 = {
    $datum.IndexOf(" ")
}
 
$scriptBlock2 = {
    for ($i = 0; $i -lt $datum.Count; $i++) {
        if ($datum[$i -eq " "]) {
            break
        }
    }
}
 
$scriptBlock1Duration = Measure-Command $scriptBlock1 
$scriptBlock2Duration = Measure-Command $scriptBlock2
 
"indexOf : {0}" -f $scriptBlock1Duration.TotalMilliseconds
"for loop: {0}" -f $scriptBlock2Duration.TotalMilliseconds
Code
1
2
3
4
5
6
7
8
9
10
11
C:\tmp\003>pwsh script.ps1
indexOf : 2298,1871
for loop: 10,1283
 
C:\tmp\003>pwsh script.ps1
indexOf : 2245,2592
for loop: 9,3957
 
C:\tmp\003>pwsh script.ps1
indexOf : 2248,8384
for loop: 9,6698
Добавлено через 28 минут
volodin661, Давай тогда твое решение децал пофиксим...

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
param (
    $delimiter = " ",
    $lines = @("АО XXX YYY", "ПАО FFFF ZZ", "ООО GGGGG")
)
 
for ($i = 0; $i -lt $lines.Count; $i++) {
    $delimiterPosition = 0
    for ($j = 0; $j -lt $lines[$i].Length; $j++) {
        if ($lines[$i][$j] -eq $delimiter) {
            $delimiterPosition = $j
            break
        }
    }
    $lines[$i].Substring($delimiterPosition + 1) + " " + $lines[$i].Substring(0, $delimiterPosition)
}
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
09.04.2024, 22:07
Цитата Сообщение от alhaos Посмотреть сообщение
if ($datum[$i -eq " "])
а чойта?
Нет, естественно, я понимаю, что это... вопрос про то, с какой целью там это проверяется? Вариантов результата ведь два всего, либо $datum[0], либо $datum[1] - что для условного блока в обоих случаях $true... т.е. на первом же элементе получим break

Code
1
2
indexOf : 2661,6067
for loop: 61369,8258
- вот так похоже на верный результат.
2
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
10.04.2024, 06:22
YuS_2, блин дважды косячник... и ведь даже подозрений не возникло...

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$datum = "_" * 100000000 + " "
 
$scriptBlock1 = {
    $datum.IndexOf(" ")
}
 
$scriptBlock2 = {
    for ($i = 0; $i -lt $datum.Length; $i++) {
        if ($datum[$i] -eq " ") {
            break
        }
    }
}
 
$scriptBlock1Duration = Measure-Command $scriptBlock1 
$scriptBlock2Duration = Measure-Command $scriptBlock2
 
"indexOf : {0}" -f $scriptBlock1Duration.TotalMilliseconds
"for loop: {0}" -f $scriptBlock2Duration.TotalMilliseconds
Code
1
2
indexOf : 2279,1584
for loop: 49062,4372
Добавлено через 7 минут
Цитата Сообщение от YuS_2 Посмотреть сообщение
Нет, естественно, я понимаю, что это... вопрос про то, с какой целью там это проверяется? Вариантов результата ведь два всего, либо $datum[0], либо $datum[1] - что для условного блока в обоих случаях $true
Еще тут ошибка в $datum.Count кое равное 1, вместо $datum.Length
0
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
10.04.2024, 08:52
Цитата Сообщение от alhaos Посмотреть сообщение
Еще тут ошибка в $datum.Count кое равное 1, вместо $datum.Length
Да, в моих данных, это учтено, там поправлено было, иначе тоже был бы неверный результат... сталкивался при работе со строками, поэтому count обычно сразу меняю на length. Просто это достаточно быстро проявляется, не стал об этом напоминать.
Кстати, тесты подобные уже были...
0
 Аватар для alhaos
1934 / 549 / 155
Регистрация: 20.02.2019
Сообщений: 2,675
Записей в блоге: 77
10.04.2024, 11:42
в го та же ситуация, string.index оптимальное будет

Go
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
package main
 
import (
    "fmt"
    "strings"
    "time"
)
 
func main() {
 
    datum := strings.Repeat("_", 100000000) + " " + strings.Repeat("_", 10000000)
 
    milestone := time.Now()
    fmt.Println(strings.Index(datum, " "))
    fmt.Println("indexOf  : ", time.Now().Sub(milestone).Milliseconds(), "ms")
 
    milestone = time.Now()
    for i := 0; i < len(datum); i++ {
        if datum[i] == 32 {
            fmt.Println(i)
            break
        }
    }
    fmt.Println("for loop : ", time.Now().Sub(milestone).Milliseconds(), "ms")
}
Code
1
2
3
4
100000000
indexOf  :  4 ms
100000000
for loop :  26 ms
в случае с поиском одного символа вызывается встроенная функция func IndexByteString(s string, c byte) int

цифры конечно поменьше...
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
10.04.2024, 13:09
Цитата Сообщение от alhaos Посмотреть сообщение
Code
1
2
indexOf : 2279,1584
for loop: 49062,4372
PowerShell
3
4
5
$scriptBlock1 = {
    $datum.IndexOf(0x20)
}
2
Любознательный
 Аватар для YuS_2
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
10.04.2024, 13:51
Fors1k, это ещё быстрее... вот, только в документации, почему-то ничего не указано по этому поводу... ну, или не ту документацию смотрел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2024, 13:51

Переставить первое и последнее слово в строке
Необходимо переставить первое и последнее слово в строке. Как реализовать?

Переставить первое и последнее слово в строке
Всем здрасте)))))) Помогите пожалуйста написать программу для i8086. такое вот условие: Переставить первое и последнее слово в строке,...

Переместить первое слово в конец строки
нужно переместить первое слово строки в конец строки (язык си). можно использовать специальные функции из библиотеки string.h ...

Переставить первое слово с последним, второе с предпоследним
Ввести текст. Переставить местами слова в каждом предложении (первое с последним, второе с предпоследним и т.д.). я Сделал так...но...

Перенести первое слово каждой строки в ее конец
Нужно перенести первое слово каждой строки в ее конец! Вот моя пограмма, но я не могу понять как написать ту часть программы в...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru