2014-11-04 4 views
1

나는 퀴즈를 만들고 텍스트 파일에서 일련의 문자열을 가져 와서 목록을 추가하여 파일 정보를 개별 문자열로 분리했습니다. 내 질문은, 개별 문자열을 숫자 값에 어떻게 대응 시키는가? 예를 들어, A = 1, B = 2, 등등.문자열 목록을 해당하는 int로 변환합니다. C#

다음 코드는 목록의 생성과 묘사 요소의 추가 :

List<string> keyPool = new List<string>(); 
OpenFileDialog keyLoad = new OpenFileDialog(); 
     keyLoad.Multiselect = false; 

     if (keyLoad.ShowDialog() == DialogResult.OK) 
     { 
      foreach (String fileName in keyLoad.FileNames) 
      { 

       key = File.ReadAllText(fileName); 

       kLabel.Text = ("Key:" + System.Environment.NewLine); 
       k1 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[0]; 
       keyPool.Add(k1); 
       k2 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[1]; 
       keyPool.Add(k2); 
       k3 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[2]; 
       keyPool.Add(k3); 
       k4 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[3]; 
       keyPool.Add(k4); 
       k5 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[4]; 
       keyPool.Add(k5); 
       k6 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[5]; 
       keyPool.Add(k6); 
       k7 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[6]; 
       keyPool.Add(k7); 
       k8 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[7]; 
       keyPool.Add(k8); 
       k9 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[8]; 
       keyPool.Add(k9); 
       k10 = key.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.RemoveEmptyEntries)[9]; 
       keyPool.Add(k10); 
      } 
     } 

방법이 작업을 수행 할 것인가?

string s = Keys.B.ToString(); 
Keys key = (Keys)Enum.Parse(typeof(Keys), s); 

가 INT로/변환하려면 :

+3

소리가 사전과 비슷하지만 실제로 무엇을 성취하려고하는지 잘 모르겠습니다. 당신이하려고하는 것에 대해 설명해 주시겠습니까? – BradleyDotNET

+0

기본적으로 10 개의 문자열을 비교하여 적절한 int (A-E : 1-5)로 변환하십시오. – BbJug

+0

그래서'int.Parse'와 비슷합니까? 어떤 문자열이 어떤 int로 연결되는지 어떻게 알 수 있습니까? – BradleyDotNET

답변

0

enum

enum Keys 
{ 
A=1, 
B, 
C, 
//continue onward 
} 

문자열로/변환하려면 사용하는 일반적인 용어로

int i = (int)Keys.B; 
Keys keyFromI = (Keys)i; 
3

, 당신이 찾고있는 사전.

Dictionary<string, int> mapping = new Dictionary<string, int>(); 
mapping.Add("A", 1); 
... 

int value = mapping["A"]; 

당신 당신은 단지 숫자에 처음 몇 대문자로 변환 할 경우 아스키 테이블을 이용할 수있다 :

이 경우, 우리는 문자열과 숫자 사이의 매핑을 정의하는 데 사용 각 "문자열을"가정 는
int value = (int)stringValue[0] - (int)'A' + 1; 
1

, B 같은 A 단일 문자, 등, 당신은 enum를 설정하고 적절한 열거 값의로 각 문자를 구문 분석 할 수 있습니다 :

public enum Letter 
{ 
    A = 1, 
    B = 2, 
    C = 3, 
    D = 4, 
    E = 5, 
    F = 6, 
    G = 7, 
    H = 8, 
    I = 9, 
    J = 10 
} 
는 한 번만 문자열을 분할해야

, 그것은 배열로 모든 값을두고 , 당신은을 통해 foreach을 할 수 있고 목록 구축 :

List<Letter> keyPool = new List<Letter>(); 
var letters = key.Split(new string[] { System.Environment.NewLine }, 
    System.StringSplitOptions.RemoveEmptyEntries); 

foreach(var letter in letters) 
{ 
    keyPool.Add((Letter)Enum.Parse(typeof(Letter), letter); 
} 

당신이, 변환 int로서 사용하기를 그냥 캐스팅 할 수 있습니다

Letter letter = Letter.A; 
int a = (int)letter; 
+0

열거 형을 사용하는 것이 최선의 방법이라고 생각하지만 사실 제대로 작동하지 못합니다.나는 문자열을 가져온다. 문자열 k1은 원래 알려지지 않았지만 궁극적으로는 B이고, 열거 형 클래스에 의해 설정된대로 숫자 2로 변환하려고한다. 이 일을 어떻게 하죠? – BbJug

0

당신은 enum 또는 알파벳 dictionary을 추가 할 필요가 없습니다!

static void Main(string[] args) 
    { 
     string intialString = "abc".ToUpper(); 
     string numberString = ""; 

     foreach (char c in intialString) 
     { 
      numberString += (int)c - 64; 
     } 

     Console.WriteLine(numberString); 
    } 

여기에 명확한 예가 나와 있습니다. 그것을 원한다면!

관련 문제