2011-08-04 3 views
1

좋은 알고리즘을 작성하는 데 약간의 문제가 있습니다. 여기 내 기준은 다음과 같습니다. xml 파일의 필드를 문자열로 읽고 일부 GUI 구성 요소를 활성화하기 위해 해석하려고합니다. 보다 구체적으로, 문자열로 읽은 필드는 "허용 된 문자"필드이고 GUI 구성 요소는 필드의 내용을 기반으로 활성화하는 확인란입니다. 예를 들어, XML에 내가 문자열로이 분야에서 읽은 태그필드 유형을 해석하여 C에서 체크 박스를 활성화하십시오 #

<Allowed Field>ABCDEFGHIJKLMNOPQRSTUVWXYZ</Allowed Fields>. 

이 프로그램은 필드 콘텐츠 형식 ALPHA 것을 알고있는 체크 박스 명명 된 알파를 확인해야합니다. 마찬가지로 필드에 영숫자 내용이나 특수 문자가있는 경우 알고리즘에서 해석해야하는 세 개의 체크 상자가 있습니다 : 알파, 영숫자 및 특수 문자. 내가 언급 한 필드 유형을 의미하기 위해 XML에서 읽은 문자열의 의미를 해석하는 알고리즘을 어떻게 구축 할 수 있습니까? 나머지는 당신이 같은 특수 문자를 정의에 따라 달라집니다

감사

+1

나는 단지 string.contains를 시도했다. 예를 들어 if 문에 A가 있음을 확인하여 알파를 고려하고 0을 포함하지는 않지만이 방법은 전혀 효과가 없습니다. – Joe

+0

예, 그렇지 않습니다. 하지만 몇 가지 코드를 게시해서 약간의 노력을 기울여야합니다. 내 대답을 참조하십시오. –

답변

1
static FieldKind AnalyzeKind (string s) 
{ 
    bool hasNumbers, hasSpecial; 

    foreach (char c in s) { 
     if (Char.IsNumber (c)) 
      hasNumbers = true; 

     else if (!Char.IsLetter (c)) 
      return FieldKind.AlphaNumericWithSpecialCharacters; 
    } 

    return (hasNumbers) ? FieldKind.AlphaNumeric : FieldKind.Alpha; 
} 

은 (공백 것입니다 예를 들면? 문장?). 참조 용 방법은
Char입니다.

+1

문자가 숫자 인 경우 첫 번째 if 문 다음에 알고리즘이 중단되지 않으며 두 번째 if 문에서 문자가 아닌 것으로 true를 반환 한 다음 SpecialCharacters를 반환합니다. 첫 번째 경우에는 휴식이 필요하고 그렇지 않은 경우 두 번째를하십시오. –

+0

@Gweebz :이 점에 감사드립니다. 내 실수. 나는 여전히 특수 문자 일 수 있고 OP가이 "특수성"을 정의하지 않았기 때문에 '즉시 중단'하지 않으므로 즉시 테스트 할 수 없습니다. –

+0

특수 문자는 기본적으로 a-z와 0-9 이외의 다른 키보드 문자입니다. 당신의 방법이이 스페셜을 위해 올바르게 작동 할 것 같아요? – Joe

2

이것은 Regex의 또 다른 가능한 응용 프로그램입니다. 이 프로그램에서 많이 AnalyseKind 호출 될하려는 경우

static Regex isAlpha = new Regex("^[A-Za-z]+$"); 
static Regex isAlphaNumeric = new Regex("^[A-Za-z0-9]+$"); 

static FieldKind AnalyzeKind (string s) 
{ 
    if(isAlpha.IsMatch(s)) return FieldKind.Alpha; 
    if(isAlphaNumeric.IsMatch(s)) return FieldKind.AlphaNumeric; 
    return FieldKind.AlphaNumericWithSpecialCharacters; 
} 

, 당신은 정규식 생성자에 RegexOptions.Compiled을 설정하여 약간 그것을 가속화 할 수있다.

+0

예, 아마 제 것보다 깨끗한 해결책입니다. –

+0

이것은 Regex의 적절한 사용법 일 것입니다. 좋은 방법! –

+0

""알파, 알파 숫자 또는 무엇으로 계산하는지에 따라 정규 표현식의 "+"문자 중 하나 이상을 "*"(즉 1 이상 일치하는 대신 0 이상 일치)로 변경하고자 할 수 있습니다. . –

관련 문제