4 votes

Diviser et ajouter des chiffres

Si j'ouvre un fichier contenant des chaînes de caractères comme "233445", comment puis-je diviser cette chaîne en chiffres "2 3 3 4 4 5" et les ajouter les uns aux autres "2 + 3 + 3 etc..." et imprimer le résultat.

Mon code jusqu'à présent ressemble à ceci :

use strict;

#open (FILE, '<', shift);
#my @strings = <FILE>;
@strings = qw(12243434, 345, 676744); ## or a contents of a file
foreach my $numbers (@strings) {
   my @done = split(undef, $numbers);
   print "@done\n";
}

Mais je ne sais pas par où commencer pour la fonction d'ajout proprement dite.

8voto

ikegami Points 133140
use strict;
use warnings;

my @strings = qw( 12243434 345 676744 );
for my $string (@strings) {
   my $sum;
   $sum += $_ for split(//, $string);
   print "$sum\n";
}

ou

use strict;
use warnings;
use List::Util qw( sum );

my @strings = qw( 12243434 345 676744 );
for my $string (@strings) {
   my $sum = sum split(//, $string);
   print "$sum\n";
}

PS - Utilisez toujours use strict; use warnings; . Il aurait détecté votre mauvaise utilisation des virgules dans qw et il aurait décrété votre mauvaise utilisation de undef para split premier argument.

2voto

perreal Points 47912
use strict;
my @done;
#open (FILE, '<', shift);
#my @strings = <FILE>;
my @strings = qw(12243434, 345, 676744); ## or a contents of a file
foreach my $numbers (@strings) {
   @done = split(undef, $numbers);
   print "@done\n";
}   

my $tot;
map { $tot += $_} @done;
print $tot, "\n";

2voto

socket puppet Points 3093

Personne n'a suggéré une eval solution ?

my @strings = qw( 12243434 345 676744 );
foreach my $string (@strings) {
    my $sum = eval join '+',split //, $string;
    print "$sum\n";
}

1voto

TLP Points 48922

Si vos chiffres sont dans un fichier, une simple phrase pourrait être utile :

perl -lnwe 'my $sum; s/(\d)/$sum += $1/eg; print $sum' numbers.txt

Étant donné que l'addition n'utilise que des chiffres, il est prudent d'ignorer tous les autres caractères. Il suffit donc de les extraire un par un avec la regex et de les additionner.

TIMTOWTDI :

perl -MList::Util=sum -lnwe 'print sum(/\d/g);' numbers.txt
perl -lnwe 'my $a; $a+=$_ for /\d/g; print $a' numbers.txt

Options :

  • -l auto-comprimer l'entrée et ajouter une nouvelle ligne à print
  • -n implicite while(<>) boucle autour du programme -- ouvre le nom du fichier donné en argument et lit chaque ligne dans le fichier $_ .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X