2014-03-18 2 views
0
내가 가진 무엇

내 생각은 무엇하스켈은 문자열의 첫 번째 자리에서 위치를 얻기

digitIndex :: String -> Int 
digitIndex [] = 1 
digitIndex (x:xs) = 
    if 
     isDigit x == True 
    then 
     -- Count list 
    else 
     -- Create list with x(x is not a digit) 

는 그가 단지 계산해야하는 자리를 통과 할 때 그가 그렇게 통과하는 모든 X와 목록을 만드는 것입니다입니다 그 목록은 숫자의 위치가됩니다 (+1 할 때).

나는 일을 더 잘하는 방법을 모른다. 너희들이 날 도와 줄 수있어?

+2

자신의 게시물을 고의적으로 파괴하지 마십시오. 제거가 필요한 경우 운영자의주의를 환기시키고 제거를 요청하십시오. –

답변

0

그냥 일반 재귀 : 첫 번째 문자 자체가 숫자 인 경우

digitIndex :: String -> Int 
digitIndex [] = 0 
digitIndex (x:xs) = if isDigit x 
        then 1 
        else 1 + digitIndex xs 

, 다음 함수는 1 다른 반환 그냥 1를 추가하고 함수에 남아있는 문자열 (xs)를 전달하고 재귀가 간다 에.

또한 String에 숫자가없는 경우 위 기능이 제대로 작동하지 않습니다.

또한 isDigit == True을 확인하지 않아도됩니다.

+0

그 좋은 출력을 작성하지 않기 때문에 : digitIndex "hel3lo"는 1과 4가 아닌 문자열을 출력합니다. (3은 문자열의 4 번째 자리에 있습니다) – user3434886

+0

@ user3434886 잘못 질문을 이해하고 해결책을 업데이트했습니다. . – Sibi

+0

어쩌면 내가 설명 할 때 더 분명해야했지만 내 문제는 해결했습니다. 고맙습니다! – user3434886

3

당신은 findIndex를 사용할 수 있습니다

import Data.List 

digitIndex :: String -> Int 
digitIndex = maybe 0 id . findIndex isDigit 
관련 문제