2013-02-22 6 views

답변

41

을 , 나는 당신에게 힌트를 줄 것이다. 라틴 알파벳 글자에 대한 모든 유니 코드 코드 포인트는 알파벳 순으로 정렬되어있다. a의 코드가 N 인 경우 b의 코드는 N+1이고 c의 코드는 N+2 등입니다. Z의 코드는 N+26입니다.

정수를 빼는 것과 같은 방법으로 문자 코드 포인트를 뺄 수 있습니다. 코드 포인트 알파벳순으로되기 때문에, 다음의 계산

char ch = 'h'; 
int pos = ch - 'a' + 1; 

h의 시퀀스 번호, 즉 8를 생성한다. 루프에서이 계산을 수행하면 필요한 결과를 얻을 수 있습니다.

위의 수식은 같은 레지스터의 문자에만 적용됩니다. 입력 문자열이 대소 문자를 혼합 한 경우 계산을 수행하기 전에 각 문자를 소문자로 변환해야합니다. 그렇지 않으면 잘못되었습니다.

+11

+1은 코드를 제공하기보다는 가르치려고하는 유일한 답입니다. 자세한 설명은 – iamnotmaynard

1
String s = "hello world"; 
String t = ""; 
for (int i = 0; i < s.length(); ++i) { 
    char ch = s.charAt(i); 
    if (!t.isEmpty()) { 
     t += " "; 
    } 
    int n = (int)ch - (int)'a' + 1; 
    t += String.valueOf(n); 
} 
System.out.println(t); 

0
당신은 같은 것을 할 수

이 가장 가능성이 학습 과제이기 때문에

for (int i = 0; i < a.length(); ++i) { 
    if (a.charAt(i) >= 'a' && a.charAt(i) <= 'z') { 
    System.out.println((int)a.charAt(i) - (int)'a'); 
    } 
} 
1
public static void main(String[] args) { 
    String s = "hello world"; 
    s = s.replace(" ", ""); 
    char[] c = s.toCharArray(); 

    for (Character ss : c) 
     System.out.println(ss - 'a' + 1); 
} 
1

미국 키는 문자이고 값은 정수입니다. 이것은 효율적인 방법은 아닙니다.지도는 클래스의 정적 멤버 여야합니다.

import java.util.HashMap; 
import java.util.Map; 


public class JavaApplication1 
{ 
    public static void main(String[] args) 
    { 
     final Map<Character, Integer> map; 
     final String str = "hello world"; 

     map = new HashMap<>(); 
     // or map = new HashMap<Character, Integer> if you are using something before Java 7. 
     map.put('a', 1); 
     map.put('b', 2); 
     map.put('c', 3); 
     map.put('d', 4); 
     map.put('e', 5); 
     map.put('f', 6); 
     map.put('g', 7); 
     map.put('h', 8); 
     map.put('i', 9); 
     map.put('j', 10); 
     map.put('k', 11); 
     map.put('l', 12); 
     map.put('m', 13); 
     map.put('n', 14); 
     map.put('o', 15); 
     map.put('p', 16); 
     map.put('q', 17); 
     map.put('r', 18); 
     map.put('s', 19); 
     map.put('t', 20); 
     map.put('u', 21); 
     map.put('v', 22); 
     map.put('w', 23); 
     map.put('x', 24); 
     map.put('y', 25); 
     map.put('z', 26); 

     for(final char c : str.toCharArray()) 
     { 
      final Integer val; 

      val = map.get(c); 

      if(val == null) 
      { 
       // some sort of error 
      } 
      else 
      { 
       System.out.print(val + " "); 
      } 
     } 

     System.out.println(); 
    } 
} 
+0

+1입니다. 인터뷰에서 BDW가이 질문을 받았다. 같은 접근법을 사용하여 대답했다. :) – amod

+0

나는 당신이 왜 그렇게 할 것인지 이해하지 못합니다. "이것은 효율적인 방법이 아닙니다"= 더 좋은 방법이 있습니다 - 그것은 무엇입니까? – Menasheh

+0

이해하기 쉽습니다. 매우 자주 사용되지 않으면 효율성은 중요하지 않습니다. 목표 # 1은 정확합니다. 목표 # 2는 이해하기 쉽고 유지하기 쉽고, 목표 # 3은 빨리 만듭니다. 다른 목표가 있다면 아마 # 2와 # 3 사이에 삽입 될 것입니다. 속도는 일반적으로 중요하지 않습니다. 코드가 느린 부분을 찾아 속도를 높이는 방법을 결정할 수 있습니다. – TofuBeer

1

posotion i의 각 문자 : 출력 s.charAt (i) - 'a'+ 1. s는 문자열입니다.

관련 문제