Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция для проверки являются ли строки анаграммами / 14 сообщений из 14, страница 1 из 1
17.03.2020, 16:36
    #39938351
kvadr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
Даны две строки. Необходимо реализовать алгоритм, определяющий, являются ли эти строки анаграммами

Не могли бы вы помочь мне написать функцию, которая бы проверяла две строки?
...
Рейтинг: 0 / 0
17.03.2020, 16:57
    #39938362
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
kvadr
Даны две строки. Необходимо реализовать алгоритм, определяющий, являются ли эти строки анаграммами

Не могли бы вы помочь мне написать функцию, которая бы проверяла две строки?



Студентам, желающим помощи
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?

Если хотите, чтобы Вам помогли, покажите что сделали:

1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные, лучше в виде with
например (не ваш случай):

Код: plsql
1.
2.
3.
4.
5.
6.
with tbl(col1,col2,col3) as (
select 1,'name1',to_date('11.02.1921','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual
)
select col2 from tbl...



2) Покажите что сделали, и что получили (не в пересказе)


3) Старайтесь не использовать screenshot, научитесь копировать и оформлять текст
...
Рейтинг: 0 / 0
17.03.2020, 18:27
    #39938408
kvadr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
Vadim Lejnin,

Задача была без сокращений "Сделать алгоритм, проверяющий две строки - являются ли они анаграммами на pl/sql

Думаю обе строки раскладывать на символы и сортировать по коду символов и алфавиту, но с созданием функции испытываю трудности.. конкретно как это сделать функцией

А протестировать можно будет таким образом

Код: plsql
1.
Select name_function("lang3201syn","nlgau2310sn") from dual



Код: plsql
1.
2.
3.
4.
5.
6.
7.
select listagg(letter) 
    within group (order by nlssort(letter, 'nls_sort=german') 
from
(
select regexp_substr('gfedcbaGFEDCBA', '.', level) as letter from dual
connect by regexp_substr('gfedcbaGFEDCBA', '.', level) is not null
);
...
Рейтинг: 0 / 0
17.03.2020, 18:32
    #39938410
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
kvadr,

Зачем тут PL/SQL?

SY.
...
Рейтинг: 0 / 0
17.03.2020, 18:38
    #39938416
kvadr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
SY,

Необходимо реализовать с помощь него
...
Рейтинг: 0 / 0
17.03.2020, 18:42
    #39938418
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
kvadr

Необходимо реализовать с помощь него


Тогда зачем:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select listagg(letter) 
    within group (order by nlssort(letter, 'nls_sort=german') 
from
(
select regexp_substr('gfedcbaGFEDCBA', '.', level) as letter from dual
connect by regexp_substr('gfedcbaGFEDCBA', '.', level) is not null
);



Если PL/SQL то банальная рекурсивная функция.

SY.
...
Рейтинг: 0 / 0
17.03.2020, 18:45
    #39938420
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
SY

Если PL/SQL то банальная рекурсивная функция.


Да и рекурсия не нужна - обыкновенный WHILE цикл.

SY.
...
Рейтинг: 0 / 0
17.03.2020, 18:46
    #39938421
kvadr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
SY,

Попросили скинуть что было сделано, но если есть предложения как это можно сделать.. я бы с удовольствием выслушал, а если ещё и с примером было бы просто шикарно
...
Рейтинг: 0 / 0
17.03.2020, 19:00
    #39938427
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
kvadr

Попросили скинуть что было сделано, но если есть предложения как это можно сделать.. я бы с удовольствием выслушал, а если ещё и с примером было бы просто шикарно


Цикл пока строка1 не NULL. В цикле проверяем длины строка1 и строка2. Не совпадают - не анаграмма и посему выход из функции. Совпадают - удаляем (replace) первого символа строка1 из строка1 и строка2.

SY.
...
Рейтинг: 0 / 0
17.03.2020, 19:05
    #39938432
kvadr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
SY,

Анограмма подразумевает совпадение символов, а не точное совпадение строк или я не так понял последнюю часть?
...
Рейтинг: 0 / 0
17.03.2020, 19:05
    #39938433
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
Ну и изначальная проверка строка1 = строка2. Если равны то не анаграмма. И прoверка строка1 и строка2 на NULL.

SY.
...
Рейтинг: 0 / 0
17.03.2020, 19:11
    #39938438
kvadr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
SY,

Для проверки как раз я и использовал код выше, но проблема не столько проверить на сходство, сколько написать именно функцию
...
Рейтинг: 0 / 0
17.03.2020, 19:47
    #39938447
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
kvadr
с примером было бы просто шикарно
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> with
  2  t(a, b) as
  3  (select 'hello', 'alloha' from dual
  4  union all select 'hello', 'elloh' from dual
  5  union all select 'hello', 'hell' from dual
  6  union all select 'hello', 'helo' from dual
  7  union all select 'hello', 'elloha' from dual)
  8  select * from t where
  9  xmlquery('for $i in tokenize(.,"#") order by $i return $i' passing regexp_replace(a,'(.)','\1#') returning content).getstringval() =
 10  xmlquery('for $i in tokenize(.,"#") order by $i return $i' passing regexp_replace(b,'(.)','\1#') returning content).getstringval();

A     B
----- ------
hello elloh

В PL/SQL можешь сам обернуть.
...
Рейтинг: 0 / 0
17.03.2020, 20:47
    #39938458
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция для проверки являются ли строки анаграммами
Кобанчег,

Проще:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with
t(a, b) as
(select 'hello', 'alloha' from dual
union all select 'hello', 'elloh' from dual
union all select 'hello', 'hell' from dual
union all select 'hello', 'helo' from dual
union all select 'hello', 'elloha' from dual)
select * from t where
xmlquery('for $i in string-to-codepoints(.) order by $i return $i' passing lower(a) returning content).getstringval() =
xmlquery('for $i in string-to-codepoints(.) order by $i return $i' passing lower(b) returning content).getstringval()
/



SY.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция для проверки являются ли строки анаграммами / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]