2016-07-09 9 views
-3

Ich muss eine Eingabezeichenfolge mithilfe einer get_integer_from_string() - Funktion in eine ganze Zahl konvertieren.
Ich benutze Ruby und ich habe diesen Zeitplan.Konvertieren einer Eingabezeichenfolge in eine Ganzzahl

enter image description here

basierend auf dem Zeitplan müssen wir von der Basis 7 bis Basis 10

Bitte beachten Sie, verdeckte: 1- Wenn Sie eine Zeichenfolge ohne Zahlenfolgen auftreten, sollten sie zurückkehren Null (0) .

2- Die Zeichenfolge kann zusätzliche Zeichen nach denen enthalten, die die ganze Zahl bilden, die ignoriert werden und keine Auswirkung auf das Verhalten dieser Funktion haben.

Vielen Dank für Ihre Hilfe bei meinen Hausaufgaben.

+2

Dies ist keine Basis 6 System, es ist Basis 7. Wissen Sie, wie man Zahlen zwischen Basen umwandelt? –

+0

@TimPietzcker eigentlich bin ich jetzt noch neu in ruby ​​danke –

Antwort

5

Wie Tim oben erwähnt, Ihre Tabelle zeigt Basis 7, nicht 6. Beide String#to_i und Fixnum#to_s eine optionale radix nehmen (Basis) Argument:

p "020".to_i(7) 
# => 14 
p 14.to_s(7) 
# => "20" 

Um mit nachfolgenden Zeichen zu behandeln, die nicht 0-6, String#slice (aka String#[]) funktioniert gut:

expr = /^[0-6]*/ 

p "72"[expr].to_i(7) 
# => 0 
p "0202xyz"[expr].to_i(7) 
# => 100 
p "27"[expr].to_i(7) 
# => 2 
+0

Zu Teil 2 der Frage, '" 020cat ".to_i (7) # => 14', aber auch' "72" .to_i (7) # => 0 ', weil die Basis 7 keine Ziffer 7 (oder 8 oder 9) verwendet, also ist dies nicht anders als '" x2 ".to_i (7) # => 0'. –

+0

@CarySwoveland und "27" .to_i (7) 'ist anscheinend' 2'. – mudasobwa

+0

Gute Augen, Leute. Ich habe meine Antwort aktualisiert. –

1

Was Sie tun möchten, ist die Zeichenfolge konvertieren auf eine ganze Zahl zur Basis 10 (die eine Basis 7 Zahl darstellt). Dies kann über

"021".to_i(7) 
# => 15 

Bitte beachten Sie die Documentation von Ruby String-Klasse für die Methode to_i()

+0

@Steve def get_integer_from_string (str) zurückgeben 0 if (/^(? \ d +) $/= ~ str) .nil? Ergebnis = 0 str.reverse.each_char.with_index do | char, index | tmp = char.to_i * 7 ** Index Ergebnis + = tmp Ende Ergebnis Rettung 0 Ende –

0

ich machte dies nicht sicher erfolgen, wenn es richtig ist

def get_integer_from_string(str) 
    return 0 if (/^(?<num>\d+)$/ =~ str).nil? 
    result = 0 
    str.reverse.each_char.with_index do |char, index| 
    tmp = char.to_i * 7**index 
    result += tmp 
    end 
    result rescue 0 
end