2010-07-26 3 views
1

저는 다소 이상한 문제가있어서 내 머리를 아프게합니다.알고리즘 도움말 : 길이에 따라 텍스트 상자에 텍스트 설명을 넣으십시오.

문제점 : 알려진 길이의 텍스트 상자와 그 안에 들어갈 텍스트가 주어지면 "..."을 상자 안에 넣으려면 텍스트를 "맞게"만드십시오. (컨텍스트 : 이것은 ASP.NET C#을위한 것입니다,하지만 난 알고리즘이 불가지론 언어라고 생각합니다.)

Example : [_________] 
Text :  The big brown dog jumped over the red fence. 
Solution :[The bi...] 

Example : [_________] 
Text :  Ferret 
Solution :[Ferret___] 

을 감안할 때 :

// Returns the number of px (as an int) that the arg text is in length 
public int textLength(String theText, float emSize) 

질문 :이 작업을 수행하는 가장 간단하고 빠른 방법은 무엇입니까?

한 번에 한 문자 씩 해킹하여 "..."을 추가 한 다음 길이를 확인하는 것이 두려워요. 맞춰야 할 문자열 중 일부는 길이가 길기 때문입니다.

답변

2

정확한 길이로 이진 검색을 수행 할 수 있습니다. 즉, 로그 (n) 크기 만 사용해도됩니다.

오, 텍스트가 (모든 문자는 전각의 폭을 제공됩니다) 고정 폭되고 또한 경우에 그것은 프로그래밍 방식으로이 문제를 알아 내기 위해 꽤 쉽게 :

if str.length * emWidth < textBoxWidth 
    tb.text = str 
else 
    tb.text = substring(str, 0, round_down(textBoxWidth/emWidth) - 3) + "..." 
+0

처음에는 텍스트 상자와 문자열 길이의 비율을 확인하여 시작 지점을 찾을 수 있다고 생각합니다 – Mchl

+0

알고리즘 이름을 포함 해 주셔서 감사합니다 '이진 검색'. 이것이 무엇을 부르는 지 기억하지 못했습니다. –

1

왜 끝에서 시작 하시겠습니까? 처음부터 시작하여 더 이상 맞지 않을 때까지 글자 (및 ...)를 추가하십시오. :)

+0

+1. 이것의 성능이 무시할 수없는 것이라면, 매우 긴 텍스트 박스를 가지고 있기 때문에 아마 GUI WTF 일 것입니다. 텍스트 영역에는 적용되지 않을 수 있습니다. –

+0

비교 포인트와 마찬가지로, 50 자의 텍스트 상자가 있다면 내 방식이 약 1 조 천백 자까지 빨라집니다. 그러나 코드는 더 복잡합니다. –

+0

일부 텍스트 상자는 최대 200 자까지 문자열에 맞출 수 있기 때문에. –

관련 문제