2009-08-18 17 views
6

Potrzebuję kodu w moim programie, który pobiera liczbę jako dane wejściowe i zamienia ją na odpowiedni tekst, np. 745 do "siedemset czterdzieści pięć".Jak przekonwertować liczbę na tekst w Perlu?

Teraz mogę napisać kod, ale czy istnieje biblioteka lub istniejący kod, którego mogę użyć?

+1

Praca na Euler Projektu problemów, wy? – dala

+0

powiązane: http://stackoverflow.com/questions/309884/code-golf-number-to-words –

Odpowiedz

17

Od perldoc z Lingua::EN::Numbers:

use Lingua::EN::Numbers qw(num2en num2en_ordinal); 

my $x = 234; 
my $y = 54; 
print "You have ", num2en($x), " things to do today!\n"; 
print "You will stop caring after the ", num2en_ordinal($y), ".\n"; 

nadrukami:

You have two hundred and thirty-four things to do today! 
You will stop caring after the fifty-fourth. 
1

Można spróbować czegoś takiego:

#!/usr/bin/perl 

use strict; 
use warnings; 

my %numinwrd = (
    0 => 'Zero', 1 => 'One', 2 => 'Two', 3 => 'Three', 4 => 'Four', 
    5 => 'Five', 6 => 'Six', 7 => 'Seven', 8 => 'Eight', 9 => 'Nine', 
); 

print "The number when converted to words is 745=>".numtowrd(745)."\n"; 

sub numtowrd { 
    my $num = shift; 
    my $txt = ""; 
    my @val = $num =~ m/./g; 

    foreach my $digit (@val) {  
    $txt .= $numinwrd{$digit} . " "; 
    } 

    return $txt; 
} 

Wyjście jest:

The number when converted to words is 745=>Seven Four Five 
+0

Aby przekonwertować '@ val' na' $ txt', może być łatwiej zrobić '$ txt = join" " , map {$ numinwrd {$ _}} @ val', efektywnie czyniąc twój okręt podwodny jednym linerem. Ponadto to rozwiązanie nie wytwarza "siedemset czterdzieści pięć". – amon

+0

Możesz podać kod, jeśli możesz wytworzyć wynik na siedemset czterdzieści pięć – user1613245

Powiązane problemy