2014-05-12 2 views
0

단어가 알파벳순인지 아닌지 알아 내기 위해 bash (no sed, awk, perl, ...)를 찾고 싶습니다. 즉, 모든 문자는 . 예 : bdjkz가 참일 경우 ahjmno가 참일 경우 sdgla가 거짓입니다.단어가 알파벳 순서인지 확인하는 방법

저는 문자에 대한 ascii 값을 비교하는 데 이미 어려움을 겪고 있습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 그것이 많은 도움이 될 것입니다!

감사

+0

현재 시도를 게시하십시오. – fedorqui

+0

나는 아무것도 가지고 있지 않다. 나는 어떻게 서로 문자를 비교할 지 모른다. – Rmo

답변

0

당신은 사용할 수 있습니다

p='bdjkz' 
q=$(fold -w1 <<< "$p"|sort|tr -d "\n") 
[[ "$p" == "$q" ]] && echo "in alphabetical order" || echo "not in alphabetical order" 
1

을 다른 명령 줄 도구 (그러나 awk, sed, perl를) 이용할 수있는 경우에, 당신은 시도 할 수 있습니다 :

[[ "YOURSTRING" = "$(echo "YOURSTRING" | grep -o '.' | sort -n |tr -d '\n')" ]] && \ 
    echo "Alphabetic order" 
  1. [[ ... ]]는 exp3210을 테스트하고 있습니다.
  2. 참고 - 인쇄 단일 문자에 대해서만 일치 : 당신이해야 할 수도 있습니다 문자열
  3. echo "YOURSTRING" | grep -o '.' 인쇄 "YOURSTRING" (-o '.'에서 선에 모든 문자의 내부 동작 출력이
  4. "YOURSTRING" = 문자열 비교
  5. "$(...)" 캡처
  6. 4에서이 옵션에 대한 grep의 새 버전)
  7. ... sort -n | 종류의 출력 ... tr -d '\n'가 다시 가입 (후행 새로운 라인 문자를 삭제하여) (5)의 문자
2

순수 bash는 솔루션 (외부 도구를 사용하지), 문자열 내에서 문자를 해결하기 위해 매개 변수 확장을 사용하여 :

function compare() { 
    word=$1 
    for ((pos=0; pos<${#word}-1; pos++)) ; do 
     [[ ${word:pos:1} < ${word:pos+1:1} ]] || return 1 
    done 
    return 0 
} 

과 테스트
for word in bdjkz ahjmno sdgla ; do 
    if compare $word ; then 
     echo $word ordered 
    else 
     echo $word not ordered 
    fi 
done 
+0

+1 매우 인상적입니다. –

0
s=($(echo "existingString" | grep -o .)) # put each character of input string in an array. 

k=($(printf '%s\n' "${s[@]}" | sort)) # sorts the input string 

if [[ "${s[*]}" == "${k[*]}" ]]; then # comparing the input string array with sorted array 
echo "alphabetical" 
else 
echo "not alphabetical" 
fi 
+0

설명을 해보십시오 * 왜 당신의 술이 문제를 해결할 수 있습니까? 그렇지 않으면 게시물의 품질이 저평가됩니다. [답변] – brasofilo

+1

@TomaszKowalczyk 댓글이 추가되었습니다. 답이 만족스럽게 설명되어 있는지 확인하십시오. – PradyJord

+0

@brasofilo 덧글을 덧붙여 만족스럽게 대답을 설명해 주 었는지 확인하십시오. – PradyJord

관련 문제