문자열 반전을 무엇에 사용합니까? [닫은]


15

PHP에서는 strrev()Rails .reverse에서는이지만 대부분의 언어에는 문자열 반전 기능이 없습니다. 일부는 문자에 사용할 수있는 배열 역전 기능이 있습니다. 나는 이것이 주요한 감독이어야한다고 생각하고 있었지만 나에게 일어났다. 실제로 문자열 반전을 어떻게 사용할 것인가 ???

내가 본 것 중 유일한 것은 데모와 레슨에서 "Hello World!"를 돌리는 것입니다. "! dlroW olleH"로

내 질문은; 문자열을 되 돌리는 데 사용됩니까, 아니면 전혀 의미가 없습니까?

.

추가

내가 예상했던 방법이 더 많았고 모두 학업이 아니었다. 아무도 합법적 인 예를 내놓을 수없는 돈을 썼을 것입니다. 나는 또한 새로운 것을 배우지 않을 것이라고 생각했지만 Mark Canlas의 정규식 제안은 훌륭하고 스스로를 증명할 수있는 기회를 기대합니다. 모두 감사합니다.


@clockworkgeek-응시자가 선호하는 언어로 문자열 반전을 수행하도록 요청하면 언급 한 기본 기능을 제공하지 않는 사람들이 얼마나 놀랍습니다. 그렇다면 얼마나 많은 사람들이 스스로 구현하기 위해 루프를 만들 수 없습니다.
justkt

@justkt-다른 모든 질문이 기다리고 있지만 TopCoder의 주제 일 수 있습니다.
clockworkgeek

6
운전 중에 백미러에서 읽을 수있는 문자 메시지를 보내 경찰이 알지 못합니다.
JeffO

@justkt-반복 루프를 작성 해야하는 경우 중간에 도달 할 때까지 문자를 바꾸는 반대쪽 끝에서 시작합니다. 그러나 두 값을 어떻게 교환합니까? 다음은 내가받은 최고의 답변입니다.a ^= b; b ^= a; a ^= b;
clockworkgeek

1
나는 문자열을 뒤집기 위해 문자열 반전을 사용합니다;)
Muad'Dib

답변:


19

섹 세저

때로는 정규식과 관련된 문제를 입력 문자열을 반대로 바꾸고 다른 방식으로 문제를 해결함으로써 더 쉽게 작성할 수 있습니다.

나에게 Perl을 가르친 사람에 의한 기술 제공.

PerlMonks의 Sexeger


감사합니다. 마지막 항목을 찾기위한 매우 편리한 트릭입니다. 정식 주목.
clockworkgeek

나는 수년간 이것을 해왔다. 이메일 주소를 구문 분석하는 데 도움이됩니다.
sal

23

글쎄, 이것은 뺨 속의 대답입니다.

"다시 돌아 가기"나는 유닉스 박스를 가지고 있었고, 맞춤법 검사에 사용되는 영어 단어의 사전 파일을 주문했다.

사전의 모든 단어를 뒤집어 정렬 한 다음 다시 뒤집어 새 파일을 만들었습니다. 결과는 오른쪽에서 왼쪽으로 정렬 된 단어 목록입니다.

따라서 단어를 검색하면 해당 단어 옆에 끝이 비슷한 단어가 표시됩니다. 그래서 작은시를 만들기가 쉬웠습니다!

무엇을 부르는 것이 무엇인지 알면 정말 즐겁게 할 수 있습니다.


13

저는 ~ 10 년 동안 코더 / 개발자 / sysadmin으로 일 했으며 실제 상황에서 문자열 반전 필요한 것을 기억할 수 없습니다 .

내가 생각할 수있는 즉각적인 유스 케이스는 숫자 기반 변환입니다. 순진하게 완료되면 절차는 반전 된 문자열을 반환합니다. 그러나 약간의 수학으로 필요한 공간을 미리 계산할 수 있으므로 끝에서 버퍼를 채울 수 있습니다.


1
수학 비트가 문자열을 반전시키는 것보다 비쌀 수 있습니다. 따라서 플랫폼 (ARM, MIPS, x86)에서 벤치마킹 한 후 문자열 반전을 사용할 수 있습니다. 아마도.
Zan Lynx

끝에서 버퍼를 채우고 memmove완료되면 a 를 사용 하여 시작할 수 있습니다. 필요한 자릿수를 계산하는 것은 log (n) / log (base)를 계산하는 것보다 저렴할 것입니다.
Patrick Schlüter

12
public bool IsPalindrome(string toCheck)
{
    return toCheck == toCheck.Reverse();
}

1
그렇습니다-우리는 실제로 후보자가 회문 검사기를 작성하고 대부분이 작업을 수행하는 인터뷰를했습니다. 그러나, 나는 더 나은 후보가에서 반복 할 때처럼 0n/2반대 끝에 문자를 비교합니다.
Nicole

@Renesis : 다음을 수행 할 수도 while ( (*p == *q) && (p <= q) {p++; q--} return p > q;있습니다. C 및 기타 포인터 언어에서 p 문자열의 시작, q 문자열의 끝을 설정합니다 .
Michael K

4
"palindrome checker"가 눈에 띄지 않지만 "palindrome checker 작성"은 적어도 목적이 있다고 생각합니다.
clockworkgeek

2
인터뷰에서 Array.Reverse, 그들은 문자열을 역달라고 부탁하고이 더 string.Rverse () 그래서 난 그냥 문자 배열에 문자열을 변환하지 기억 "고 말했다과했다.
잭 마르 체티

그것은 꽤 틈새 사용이며 일반적으로 언어 / 라이브러리에 포함시킬 가치가 있다고 말하는 것은 아닙니다!
Dan Diplo

8

인터뷰!

문자열을 뒤집는 것 (제자리에 있든 없든)은 기본 프로그래밍 지식에 대한 매우 일반적인 인터뷰 질문입니다. 이러한 내장 함수가없는 언어는 인터뷰하기 어려울 것입니다. 응시자는 실제로 무언가를 알아야합니다. 1


1 : 이것은 뺨에 답입니다.


6

데스크톱 응용 프로그램이 임베디드 장치와 대화하고 바이트 순서 엔디안을 지속적으로 전환하고 데이터가 문자열로 이동하는 상황을 보았습니다. 그것은 나를 위해 그것에 관한 것입니다.

해당 응용 프로그램에 문자열을 사용하지 않았지만 그 방식 그대로였습니다 .....


이 답변에 +1 아마도 다른 방법으로, 아마도 다른 엔디안 인 기본 유형을 선택하여 다른 방법으로 수행했을지라도 적어도 실용적인 예입니다.
clockworkgeek

5
<span style="unicode-bidi: bidi-override; direction:rtl;">
    <?php echo strrev($emailaddress); ?>
</span>

전자 메일 주소를 난독 처리하는 데 가장 적합한 솔루션은 아닙니다. 전자 메일 주소를 클립 보드에 추가하면 여전히 반전되기 때문입니다. 그리고 인기가 높아지면 곧 이메일 스크랩 봇으로 탐지 될 것입니다.

아직도, 그것은 제안되었습니다 .


1
그리고 가장 많이 사용되는 난독 화는 전체 기사에서 한 문장으로 주어졌습니다. 이미지로 인코딩.
clockworkgeek

1
@clockworkgeek, 그것은 인기있는 것일지도 모르지만 IMHO는 효과적인 솔루션 중 최악입니다. 생성하기 쉽지 않고 HTML (속도, 이미지 저장, 서버로드)에 포함되지 않고 스타일이 맞지 않습니다. CSS를 사용하고 문자열 반전과 같은 열악한 사용자 경험을 기억하고 다시 입력해야합니다. 그리고 아마 내가 생각하지 않는 더 많은 문제.
Nicole

흥미롭게도 수확기를 위해 가장 해독하기 쉬운 AT와 DOT를 사용하면 수확을 막는 데 거의 완벽한 효과가 있음이 밝혀졌습니다. 때로는 단순하게 유지하는 것이 그렇게 나쁜 생각이 아닙니다.
Joeri Sebrechts

5

ASCII는 유전자 정보를위한 최상의 인코딩이 아닙니다 (기본 유형 ACGT를 2 비트로 압축 할 수 있음). 그것들을 긴 배열로 묶으면 단어 당 32 개의 유전자 "문자"를 얻게됩니다. DNA가 뒤바뀔 수 있으므로 테스트 시퀀스의 역순 사본에 대해 DNA 덩어리를 확인해야합니다. 따라서 2 비트 수량의 묶음 문자열을 되돌릴 수 있다는 것은 다양한 종류의 유전자 분석에 매우 유용 할 수 있습니다.

나는 스파이 기관의 벤치 마크에 대한 항목으로, 비트를 오랫동안 (실제로는 매우 긴 배열로) 얼마나 빨리 되돌릴 수 있습니까? 한 번에 2 비트를 교환하는 명백한 방법은 덜 명백한 방법보다 훨씬 느립니다. 이들은 제자리 배열 전치에 대한 깔끔한 알고리즘 중 일부와 관련이 있습니다.

Tangurena : 참조하는 작업을 인구 수라고합니다. 비트 패킹 된 데이터에 대한 유사한 바람직한 것은 선행 및 후행 제로 카운트이다. 비트 패킹 된 데이터로 할 수있는 정말 깔끔한 작업이 많이 있습니다. longlong의 단일 작업은 64way 데이터 병렬이므로 수행중인 작업을 알고 있으면 특정 유형의 계산에 대해 놀라운 성능을 얻을 수 있습니다.


흥미로운 주제, 비트 필드를 어떻게 바꾸겠습니까?
clockworkgeek

"비트 필드를 어떻게 바꾸겠습니까?"
Omega Centauri

2
한 가지 접근 방식은 테이블 조회입니다. 테이블을 사용하여 바이트를 반전시킬 수 있습니다. 따라서 개별 바이트에서 그렇게 할 수 있습니다. 여러 비트를 한 번 이동하는 방법도 있습니다 ... 약간의 영리함과 트레이드 오프 (테이블 크기 대 작업 수 등) 및 튜닝을 시도 할 수 있습니다.
Omega Centauri

5

반전 된 문자열로 작업하는 것이 더 쉽습니다.

문자열을 뒤집 으면 정수를 문자열로 사용하는 것이 훨씬 쉽습니다. 큰 정수를 사용하여 수학을 수행하기위한 라이브러리 함수를 만들고 문자열 반전을 사용하여 산술 함수를 단순화했습니다.

물론, 나는 프로젝트 오일러에 대한 답변을 찾기 위해 그것을 사용했지만 여전히 원래 전제를 보유하고 있습니다.


+1. 숫자의 문자열 표현을 사용할 때 역 표현이 매우 유용합니다. 일반적으로 표준 라이브러리는 일반적인 순서로 숫자를 나타냅니다.
back2dos

3

왼쪽에서 오른쪽 대신 오른쪽에서 왼쪽으로 (예 : 아랍어) 문자를 사용하는 언어의 경우 저렴한 다국어 지원이 가능합니다. 물론 올바른 문자를 수정하는 악센트 문자를 조심해야합니다 ...


2

나는 누군가가 회문 을 점검 할 필요가 있다고 생각하지 않는다 ....

문자열을 뒤집을 수 있어야하는 상황이있을 수 있으므로 완전히 쓸모가 없다고 생각합니다.


그에 대한 후속 질문은 언제 현실 세계에서 회문을 확인해야 했습니까? 다시 한 번, 알고리즘 수업에 관심이있는 사람을 본 적이 있습니다.
clockworkgeek

예를 들면 다음과 같습니다. jimsabo.com/palindrome.html
Darknight

다른 용도로 사용되었을 수도 있지만 도메인별로 다릅니다. 예를 들어 문자열 검색이 정방향 검색에 최적화되어 있고 마지막 검색에 대해 여러 번 검색하려는 경우 먼저 검색을 되돌릴 수 있습니다. 이것은 최적화이지만, 가능한 사례가 없으면 수행해서는 안됩니다. 더 나은 해싱 특성을 제공하기 위해 꼬리 끝을 사용하고 싶었던 문자열 값의 해시를 생성하는 알고리즘을 상상할 수 있습니다.
Scott Whitlock

2

자연어 처리 및 구문 분석에서 때로는 처음부터 끝까지 문자열을 검색하기가 더 쉽습니다. 문자열 반전은 디버깅에 유용하거나 루프를 작성하는 대체 방법으로 유용합니다 (문자열을 뒤집은 다음 색인 0에서 n-1로 반복).

또한 일부 언어는 오른쪽에서 왼쪽으로 작성되므로 LTR / RTL 언어를 기본적으로 인식하지 못하는 환경에있는 경우이를 위해 문자열 반전기를 사용할 수 있습니다.

문자열 (일부 언어)은 문자 배열이지만 급여 나 재고 수정일 수도 있습니다. 이것들을 가로 질러 움직이는 루프에서는 처리 순서에 관계없이 동일한 계산을 수행 할 수 있습니다. 완벽하게 cromulent 단위 테스트는 계산이 앞으로 또는 뒤로 동일하게 적용되는지 확인하는 것입니다. 이것은 추가에있어 명백 할 수도 있고, 더 불투명 한 조작에는 해당되지 않을 수도 있습니다.


1

컴파일러의 경우?

재미 있지만, 언어의 대부분의 기호는 일반적인 패턴으로 시작합니다. 여기서는 헝가리 표기법에 대해 이야기하고 있지 않지만 네임 스페이스 / 클래스에 대해 생각하면 많은 기호가 실제로 공통 접두사를 공유 합니다 .

myproject::SomeClass::GetFoo
myproject::SomeClass::GetBar

문제는 이진 검색을 할 때 일반적인 접두사가 최악의 결과입니다. 왜냐하면 접두사를 반복해서 비교할 수 있기 때문입니다.

반면에, 끈을 뒤로 보면 훨씬 더 엔트로피를 볼 수 있습니다! 그리고 갑자기 이진 검색 (Trie를 통한)이 훨씬 강력 해집니다!

gcc에 의한 C ++ 맹 글링 된 이름이 네임 스페이스 LAST를 넣는 것으로 바뀌지 않았다는 것이 항상 나에게 버그가되었습니다. :)


0

검색을 위해 전화 번호와 특정 문자열을 뒤집습니다.


0

사용 된 문자열 반전을 볼 수있는 유일한 시간은 파일 이름을 구문 분석하는 동안 다시 사용하여 '.' 파일 이름에서 실제로는 파일 이름을 확장명과 분리 한 마지막 점이었습니다. 즉, 파일 이름을 파싱 data.2010.12.08.dat하면 문자열을 뒤집고 첫 번째 점을 찾은 다음 원래 문자열의 끝에서 해당 위치를 빼고 하위 문자열을 가져옵니다. 나는 그것이 최선의 방법이라고 말하는 것이 아니라 그것이 한 일입니다. 그것은 분명한 기능 사용이 다양한 비 명백한 문제를 해결하는 데 공통적 인 파워 빌더에서 있었을 것입니다.


0

strrev를 사용하여 본 유일한 worls 앱은 데이터베이스에 사용자 비밀번호를 '읽을 수 없음'으로 저장하는 것이 었습니다 ...

그러나 strrev를 사용하기 위해 C에 패턴이 있음을 기억할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.