Текстов Обръщач: Обръщане на Текст и Обръщане на Знаци Мигновено
Безплатен онлайн инструмент за обръщане на текст, който незабавно обръща всеки низ. Обръщане на знаци, проверка на палиндроми и създаване на текст отзад напред. Работи с Уникод, емоджита и всички езици.
Инструмент за обръщане на текст
Въведете или поставете текст по-долу, за да обърнете незабавно реда на знаците. Виждайте резултатите в реално време докато пишете.
Документация
Какво представлява инструментът за обръщане на текст?
Инструментът за обръщане на текст е средство, което обръща реда на знаците в даден текст. При въвеждане на „hello“ се получава „olleh“. Той записва всеки знак от входа в обратен ред — от последния към първия. Използва се за създаване на текст в обратна посока, за проверка дали дадена дума е палиндром или за изучаване на начина, по който работи обръщането на низове в програмирането.
Как се използва инструментът за обръщане на текст
- Въведете или поставете текст в полето за въвеждане.
- Обърнатият текст се появява отдолу веднага щом спрете да пишете. Не е необходимо да натискате бутон.
- Натиснете бутона за копиране, за да копирате резултата.
Бутонът за нулиране изчиства както въведения текст, така и резултата. Инструментът приема до 10 000 знака; при по-дълъг текст се показва съобщение за грешка с молба той да бъде съкратен. Ограничението се отчита в кодови единици UTF-16 – малките части, в които браузърът съхранява текста, така че повечето емоджита се броят за два знака.
Формула за обръщане на текст
За низ с дължина n, съставен от знаците , обърнатият низ е:
Казано с прости думи: последният знак става първи, предпоследният става втори и така нататък, докато първият знак стане последен.
Как работи алгоритъмът — стъпка по стъпка
- Започнете с празен резултат.
- Вземете последния знак от входа и го добавете към резултата.
- Вземете предпоследния знак и го добавете.
- Повтаряйте, докато всички знаци бъдат добавени в обратен ред.
Повечето инструменти за обръщане работят с отделните компютърни знаци. Този инструмент преди обръщането групира всяко емоджи, знаме и буква с диакритичен знак в една единица, като използва метод, наречен сегментиране на графемни клъстери. Разделът по-долу обяснява защо това е важно.
Пример с изчисление
Вход: Hello, World!
Обърнат текст: !dlroW ,olleH
Всеки знак, включително запетаята, интервалът и удивителният знак, запазва своята идентичност. Променя се само редът.
Обработка на емоджи, диакритични знаци и други знаци на Unicode
Един видим знак, например емоджи или буква с диакритичен знак, често се съхранява като повече от една скрита единица. Unicode нарича видимия знак "user-perceived character" (знак, възприеман от потребителя) или графемен клъстер, а той може да се състои от няколко кодови точки. Кодовата точка е един номериран знак в Unicode, например буква или отделен диакритичен знак. Браузърите съхраняват много кодови точки, включително повечето емоджита, като две по-малки кодови единици. Метод за обръщане, който обръща тези единици една по една, без да се съобразява кои от тях принадлежат заедно, може да разкъса знака на части.
Например „Hello 👍“ съдържа емоджи с вдигнат палец, изградено от двойка скрити единици. Обикновеното обръщане на единиците поотделно може да раздели тази двойка и вместо емоджито да създаде повредени символи. Този инструмент избягва проблема, като третира всяко емоджи, знаме и буква с диакритичен знак като една единица, така че „Hello 👍“ правилно се превръща в „👍 olleH“. Емоджи със знаме, изградено от два скрити символа, представящи код на държава, също се запазва цялостно: „🇺🇸 USA“ се обръща до „ASU 🇺🇸“, вместо знамето да бъде разделено.
Обичайни приложения
- Проверка за палиндроми: палиндромът се чете еднакво отпред и отзад, например „racecar“. Сравняването на дума с нейния обърнат вариант е един от начините да се провери това.
- Изучаване на програмиране: обръщането на низ е често упражнение за практикуване на цикли, масиви и стекове.
- Игри с думи и главоблъсканици: обърнатите думи се използват за скриване на съобщения в главоблъсканици и ескейп стаи.
- Дизайнерски ефекти: някои дизайнери обръщат текста за огледални лога или визуални ефекти.
- Отстраняване на грешки: сравняването на текста в нормален и обърнат ред може да помогне за откриването на определени грешки в данните.
Обръщане на знаци и обръщане на думи
Тези две операции често се бъркат.
- Обръщане на знаците (това прави този инструмент): всеки знак се обръща. "Hello World" става "dlroW olleH".
- Обръщане на думите: всяка дума остава цяла, но редът на думите се променя. "Hello World" става "World Hello".
Кратка история
Обърнатото и огледалното писане се появяват хиляди години преди компютрите. В някои древногръцки надписи е използван стил, наречен бустрофедон, при който посоката на редовете се редува — отляво надясно, а след това отдясно наляво — подобно на движението на вол при оран на нива. Леонардо да Винчи е написал голяма част от бележниците си в огледален шрифт, който може да се прочете само пред огледало; историците все още спорят дали го е правил заради секретност, за удобство като левичар или за да не размазва мастилото.
В изчислителната техника обръщането на низ е стандартно упражнение по програмиране още от ранните дни на компютърните науки. То често се използва за преподаване на начина, по който работят стековете и масивите, тъй като поставянето на знаци в стек и изваждането им от него автоматично обръща реда им.
Как да обърнете текст в код
Повечето езици за програмиране включват вградена или проста възможност за обръщане на низ:
1text = "Hello, World!"
2print(text[::-1]) # !dlroW ,olleH
31const text = "Hello, World!";
2console.log([...text].reverse().join('')); // !dlroW ,olleH
3И двата примера обръщат текста правилно при обикновени букви и цифри, както и при емоджита от една единица, като 🌍. Те все пак могат да разкъсат знак, съставен от няколко скрити единици, например някои емоджита на знамена, букви с диакритичен знак, въведени с отделен диакритичен знак, или емоджита на семейства, свързани със специални свързващи знаци. За пълно обръщане, безопасно за графемите, какъвто е методът на този инструмент, е нужна специална функция, например функцията Intl.Segmenter в JavaScript.
Производителност
Обръщането на текст изисква линейно време: алгоритъмът разглежда всеки знак точно веднъж, така че удвояването на входа приблизително удвоява работата. При обикновен текст — от една дума до няколко страници — резултатът се появява практически незабавно. Много големите файлове, с размер от порядъка на мегабайти и повече, се обработват по-добре от специализирани програми, които предават данните на части, вместо да ги зареждат наведнъж в паметта.
Често задавани въпроси
Как да обърна текст онлайн?
Поставете или въведете текст в полето по-горе. Обърнатият текст се появява автоматично веднага щом спрете да пишете. Използвайте бутона за копиране, за да копирате резултата.
Има ли максимална дължина на текста?
Да. Инструментът приема до 10 000 знака, отчетени като кодови единици UTF-16, така че едно емоджи обикновено се брои за два знака. При по-дълъг текст вместо резултат се показва съобщение за грешка.
Този инструмент обръща ли думи или само знаци?
Той обръща отделните знаци, а не реда на думите. "Hello World" става "dlroW olleH", а не "World Hello".
Може ли да обработва емоджи и текст на други езици?
Да. Инструментът третира емоджи, знамена и букви с диакритични знаци като отделни единици, така че те остават цели след обръщането. Работи и с всяка писменост, включително китайски, арабски и кирилски текст.
Ако обърна текста два пъти, ще получа ли отново оригинала?
При обикновен текст – да. Обръщането на вече обърнат низ възстановява оригинала. Функция с такова свойство се нарича инволюция. В редки гранични случаи, например при текст, който започва със самотен диакритичен знак, след първото обръщане знаците могат да се слеят в различен графемен клъстер, така че второто обръщане може да не съвпадне точно.
Полезен ли е обърнатият текст за криптиране?
Не. Обръщането на знаците не е сигурно. То само скрива текста визуално и всеки, който го обърне обратно, може да го прочете.
Източници
- Консорциумът Unicode. Unicode Standard Annex #29: Unicode Text Segmentation. UAX #29 — графемни клъстери ("user-perceived characters"), съставени от няколко кодови точки; последователностите за знамена се запазват заедно.
- MDN Web Docs. Intl.Segmenter. MDN: Intl.Segmenter — програмен интерфейс на JavaScript, който разделя низ на графеми, думи или изречения.
- MDN Web Docs. String: length. MDN: String length — дължината на низ в JavaScript се отчита в кодови единици UTF-16; един знак може да заема една или две.