2014-05-09 2 views
0

나는 #이 나타난 횟수를 계산하기 위해 예를 들어 어떤 것이 나타 났던 횟수를 어떻게 계산할 것인지 궁금해하고있었습니다. 문자열이 의미하는 경우,심볼을 본 횟수를 세는 것

H#i thank#s for the hel#p 

그러면 다음과 같이됩니다. h1i thank2s for the hel3p.

#을 확인하는 것이 쉽다는 것을 알고 있습니다. 그러나 내가 끊어 놓은 부분은 숫자를 얻기 위해 기본적인 수학을하는 법을 아는 것입니다. 죄송합니다. 이것은 바보 같은 질문이며 도움을 주셔서 감사합니다!

+0

@Yuki가 가장 좋은 해결책을 제안했지만 실천을 위해이 방법을 시도해 볼 수도 있습니다. 먼저 문자열을 문자 배열로 변환합니다. [String # split] (http://www.ruby-doc.org/core-2.1.0/String.html#method-split) 또는 [String # chars ] (http://www.ruby-doc.org/core-2.1.0/String.html#method-i-chars) (또는 [String # each_char]를 사용하는 열거 자 (http : //www.ruby- doc.org/core-2.1.0/String.html#method-i-each_char)). 배열 요소 '#''에 대한 대체 작업을 수행 한 다음 [Array # join] (http://www.ruby-doc.org/core-2.1.1/Array.html#method-i-join)을 사용하여 문자열을 다시 형성하십시오. –

+0

@CarySwoveland 유키의 대답은 전혀 최선의 해결책이 아닙니다. 반복 밖의 카운터를 정의하는 것은 Ruby가 아닌 것입니다. 수동으로 증가시키는 것은 추악합니다. 훨씬 더 나은 해결책은'with_index (1)'을 사용하는 것입니다. – sawa

+0

@CarySwovel 그리고 당신의 대답은 어디에 있습니까? – Ashe

답변

2

String#gsubgsub(pattern) {|match| block } → new_str 서명을 사용하면 특정 코드 (블록)를 실행하여 매치마다 다른 대체물을 생성 할 수 있습니다.

gsub에 대한 호출 외부에서 선언 된 카운터를 사용하여 블록에서 증가시켜 새로 증가 된 값을 반환합니다.

+0

2 초 후에 나를 이길 : D – Amadan

+1

@Amadan : :)! 나는 숙제 문제로 보이는 것에 솔직하게 해결책을 제시하는 것을 선호하지 않았다. – Ashe

+0

네 말이 맞아 ... – Amadan

관련 문제