Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.03.2024
Сообщений: 11

string converter

22.03.2024, 21:45. Показов 493. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте колеги по цеху

Пытаюсь написать конвертер строки к конкретно заданому патерну ввод = 11cCde, результат = 11/3/3/4/5


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

Я написал такой класс но у меня как-то уже громозтко получилось, может кто-то сможет помочь сделать более элегантно : )


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public function convert(string $value, string $delimiter = '/'): string
    {
        $result = '';
 
        $devidedAlphabetFromOther = preg_split('/(?<=[0-9])(?=[a-z]+)/i', $value);
 
        foreach ($devidedAlphabetFromOther as $value) {
            if (!preg_match('/[a-zA-Z]/', $value)) {
                $result .= $value . $delimiter;
 
                continue;
            }
 
            array_map(function (string $char) use (&$result, $delimiter) {
                $alphabetic = range('A', 'Z') ;
 
                $result .= array_search(strtoupper($char), $alphabetic) + 1 . $delimiter;
            }, str_split($value));
        }
 
        return $result;
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2024, 21:45
Ответы с готовыми решениями:

Ошибка PHPOfice: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name
Fatal error: Cannot use PhpOffice\PhpWord\Shared\String as String because 'String' is a special class name in...

Spring MVC конвертеры Converter<Object, String> не регистрируется в WebMvcConfigurerAdapter
Имеются конвертеры @Component public class RoleToUserProfileConverter implements Converter&lt;Object, UserProfile&gt;{ static final...

Нельзя преобразовать тип Tuple<string,string,string,string> к string
Здравствуйте, у меня возникла проблема. При запуске кода, вылезает ошибка &quot;Нельзя преобразовать тип...

10
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
22.03.2024, 22:28
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function convertString($input_string) {
    $output = [];
 
    $last_char = '';
 
    foreach (str_split($input_string) as $char) {
        if (ctype_digit($char)) {
            if (ctype_digit($last_char)) {
                $output[count($output)-1] .= $char;
            } else {
                $output[] = $char;
            }
        } elseif (ctype_upper($char)) {
            $output[] = intval(ord($char) - 64);
        } elseif (ctype_lower($char)) {
            $output[] = intval(ord($char) - 96);
        }
 
        $last_char = $char;
    }
 
    return implode('/', $output);
}
Добавлено через 10 минут
Без str_split

Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function convertString($input_string) {
    $output = [];
    for($i = 0, $m = mb_strlen($input_string); $i < $m; $i++) {
        $char = $input_string[$i];
        if(ctype_digit($char)) {
            $chars = '';
            do  {
                $chars .= $char;
                if(!(isset($input_string[$i+1]) && ctype_digit($input_string[$i+1]))) {
                    break;
                }
                $char = $input_string[++$i];
            } while(true);
            $output[] = $chars;
        } elseif (ctype_upper($char)) {
            $output[] = intval(ord($char) - 64);
        } elseif (ctype_lower($char)) {
            $output[] = intval(ord($char) - 96);
        }
    }
 
    return implode('/', $output);
}
PHP
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
function convertString($input_string) {
    $output = [];
    for($i = 0, $m = mb_strlen($input_string); $i < $m; $i++) {
        $char = $input_string[$i];
        if(ctype_digit($char)) {
            $chars = '';
            do {
                $chars .= $char;
                $next_char = $input_string[$i + 1] ?? '';
                if (ctype_digit($next_char)) {
                    $char = $next_char;
                    $i++;
                } else {
                    break;
                }
            } while (true);
 
            $output[] = $chars;
        } elseif (ctype_upper($char)) {
            $output[] = intval(ord($char) - 64);
        } elseif (ctype_lower($char)) {
            $output[] = intval(ord($char) - 96);
        }
    }
 
    return implode('/', $output);
}
1
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,452
Записей в блоге: 2
22.03.2024, 22:36
как вариант
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$str = 'az 1AZ22 33';
 
    function convert(string $value, string $delimiter = '/'): string
    {
        preg_match_all('#\d+|([a-z])|.+?#i', $value, $m, PREG_SET_ORDER);
        array_walk($m, function(&$e){ 
            $e = isset($e[1])? (($x = ord($e[1])) > 96 ? $x-96: $x-64): $e[0]; });
        return implode($delimiter, $m);
    }
 
 
echo '<pre>', var_export(
    [$str,  convert($str)]
,1),'</pre>';
array (
0 => 'az 1AZ22 33',
1 => '1/26/ /1/1/26/22/ /33',
)
1
0 / 0 / 0
Регистрация: 22.03.2024
Сообщений: 11
22.03.2024, 22:42  [ТС]
Именч, имеет смысл в проверках lower/upper ?
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
22.03.2024, 22:43
Регулярки ? Давайте поиграем в эту игру)

PHP
1
2
3
4
5
6
function convertString($input_string) {
    return preg_replace_callback('/[a-z]/i', function($match) {
        $char = $match[0];
        return '/'.(ord($char) - (ctype_upper($char) ? 64 : 96)) ;
    }, $input_string); 
}
*
1
0 / 0 / 0
Регистрация: 22.03.2024
Сообщений: 11
22.03.2024, 22:48  [ТС]
Именч,

последний слегка неверно работает


ввод = 11cCde, вывод = 113/3/4/5/ , ожидаем = 11/3/3/4/5
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
22.03.2024, 22:49
Поправил
0
Невнимательный
 Аватар для ft4l
3107 / 1277 / 358
Регистрация: 08.02.2013
Сообщений: 7,452
Записей в блоге: 2
22.03.2024, 22:50
Цитата Сообщение от Именч Посмотреть сообщение
preg_replace_callback
я думал об этом ,) там с разделителями не так красиво получалось-бы... если даже с rtrim() в вашем примере )
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
22.03.2024, 22:51
Цитата Сообщение от ft4l Посмотреть сообщение
если даже с rtrim() в вашем примере )
Я убрал)Подумал что вывод будет неверный если с права добавлять. Надо же с лева. А вообще надо компилировать код, прежде чем выкладывать) Ленюсь
0
0 / 0 / 0
Регистрация: 22.03.2024
Сообщений: 11
22.03.2024, 23:17  [ТС]
Именч, в принципе хороший вариант спасибо =)

есть нюанс конечно в разделителем если будет буква первая то он добавится всё равно ) но условия не было такого )

Добавлено через 2 минуты
как-бы вы назвали такой класс? который делает такую трансформацию ?)
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
23.03.2024, 02:05
ltrim кстати всё таки придётся заюзать.

PHP
1
2
3
4
5
function convertStringToNumbers($input_string) {
    return ltrim(preg_replace_callback('/[a-z]/i', function($match) {
        return '/'.(ord($char = $match[0]) - (ctype_upper($char) ? 64 : 96)) ;
    }, $input_string), '/'); 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.03.2024, 02:05
Помогаю со студенческими работами здесь

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population. Создание объектов может происходить как без...

Создайте класс Animal. Добавьте поля string Name, string Kind, string Areal, int Population
Здравствуйте! По C# есть задачка, с которой я так и не разобрался :( Задача: Создайте класс Animal. Добавьте поля string...

Converter
Форумчане, добрый день. Подскажите. Есть например реализация приложения с конвертером. using System; using...

Доступ к паре в map<string, vector<pair<string, string>>>Temp
Подскажите пожалуйста как получить данные в векторе пар ? void showData(const map&lt;string, vector&lt;pair&lt;string,...

Converter GridView
Есть GridView , состоящий из 4 колонок. Так же, есть два List, один из которых типа string, а другой int. Задача состоит в том, чтобы...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru