최근 누군가가 algorithm for reversing a string in place in C에 대해 질문했습니다. 제안 된 솔루션의 대부분은 1 바이트가 아닌 문자열을 처리 할 때 문제가있었습니다. 그래서 저는 utf-8 문자열을 다루는 좋은 알고리즘이 무엇인지 궁금합니다.UTF-8 문자열을 제 위치에서 되돌리려면 어떻게해야합니까?
나는 코드로 대답을 올렸지 만, 다른 사람들의 아이디어 나 제안을 보게되어 기쁩니다. 나는 실제 코드를 사용하기를 선호했기 때문에이 사이트에서 가장 인기있는 언어 중 하나 인 것처럼 C#을 선택했습니다.하지만 코드가 다른 언어로되어 있다면 괜찮습니다. 명령형 언어에 익숙한 사람이라면 누구나 이해할 수 있습니다. 그리고 이것은 그러한 알고리즘이 저수준 (저수준에서 바이트를 다루는 것을 의미 함)에서 어떻게 구현 될 수 있는지를 알기위한 것이므로 핵심 코드에 라이브러리를 사용하지 않는 것이 좋습니다.
참고 :; 난 그것을 최적화 할 수있는 방법을
내가 알고리즘 자체에 관심이 있어요, 그 성능 및 (I 알고리즘 레벨 최적화, 나는 이러한 ++와 ++ 교체하지 의미 실제 벤치 마크에도 관심이 없다).
실제로 프로덕션 코드 또는 "휠체어 다시 작성"에서 사용하는 것은 아닙니다. 이것은 호기심과 운동으로 끝난 것입니다.
Null을 찾을 때까지 문자열을 실행하지 않고 문자열의 길이를 얻을 수 있다고 가정하므로 C# 바이트 배열을 사용하고 있습니다. 즉, 문자열의 길이를 찾는 복잡성을 고려하지 않았습니다. 그러나 예를 들어 C를 사용하는 경우 코어 코드를 호출하기 전에 strlen()을 사용하여 문제를 해결할 수 있습니다.
편집 : 마이크 F가 지적 하듯이
, 내 코드 (그리고 여기에 게시 다른 사람의 코드) 복합 문자로 취급되지 않습니다. 그 사람들에 관한 정보는 here입니다. 나는이 개념에 익숙하지 않지만 "결합 문자"즉, 다른 "기본"문자/코드 포인트와 결합해서 만 유효한 문자/코드 포인트가 있다는 것을 의미한다면, 그러한 되돌릴 때 "전역"문자 ("기본"+ "결합"문자)의 순서를 유지하기 위해 문자를 사용할 수 있습니다.
재미있는 질문이지만 유니 코드 문자열 (UTF8 또는 기타)을 * 유용하게 * 역순으로 사용하려면 혼합 문자의 순서와 저글링 바이트의 순서를 유지해야한다는 점에 대해 걱정해야합니다. –
머리를 주셔서 감사합니다. 나는 합성 문자를 몰랐다. 나는 그것을 먼저 볼 것입니다. –