• ベストアンサー

マジカルインクリメントの実装について

受け取った文字列を「数字 → アルファベット大文字 → 小文字」の順にマジカルインクリメントして返すようなサブルーチンを作りたいのですが、どのように実装すればよいのでしょうか? 通常のインクリメント演算子 (++) を使うと、数字ならば数字、大文字ならば大文字という規則でインクリメントされますが、それを拡張したいと思っています。 どなたか、大まかな手順のみでも構いませんので、ご教示いただければ幸いです。よろしくお願い致します。 OS: Windows XP ActivePerl v5.10.0

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

引数を一度 split して文字に分解して, 文字ごとに処理していけばいい (もちろん最後に join する) んじゃないかなぁ? 例えば sub magical_increment { my @inputs = reverse split //, $_[0]; my $flag = 0; for my $ch (@inputs) { if ($ch =~ /[0-8A-Ya-y]/) { $ch++; $flag = 1; last; } elsif ($ch == '9') { $ch = 'A'; $flag = 1; last; } elsif ($ch == 'Z') { $ch = 'a'; $flag = 1; last; } else { $ch = '0'; } } push @inputs, '1' unless $flag; join '', reverse @inputs; でできるかなぁ? もうちょっと賢くできるけど....

_--_--_-_-
質問者

お礼

なるほど、文字ごとに分けて処理をしていけばよいのですね。 しかし、試してみたところ z の次が a になってしまうようです。 私も以下のようなコードを考えてみたのですが、繰り上がりが上手くいきません…と思っていたのですが、適当に書き直していたところ、偶然にも上手くいってしまいました。 sub inc{     my $str = shift;     if (substr($str, -1) eq '9') {         substr($str, -1) = 'A';     }     elsif (substr($str, -1) eq 'Z') {         substr($str, -1) = 'a';     }     elsif (substr($str, -1) eq 'z') {         substr($str, -1) = '0';         if (substr($str, -2, 1) eq '') {             $str = "0$str";         }         else{             substr($str, 0, -1) = inc(substr $str, 0, -1);         }     }     else{         $str++;     }     return $str; } 自己解決しました。お手数お掛けして申し訳ありません。 ご回答有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • インクリメント演算子の前後

    インクリメント演算子(++や--)について伺いたいのですが、 以下のような場合、変数の前と後ろで何か処理上違いはあるのでしょうか? //文字列の最後までポインタを進める while ( *p1 ) { ++p1; } printf("%d" , *p++); のように(文法が間違っていたらすいません)、 出力した後でインクリメントするといった使い方の違いは分かるのですが、インクリメント単独処理での前後の違いがあれば教えていただきたいです。

  • Perlでの文字列操作について

    Perlを使用しての文字列操作について教えてください。 たとえば以下のような数字とアルファベットが順に並ぶ文字列があるとします。 11A4C555D67B114B9423C アルファベットは1文字ですが、数字は何個でも連続で並びます。 この文字列を「数字アルファベット」の部分で分割し、配列に格納したいのですが、うまくいきません。 @array=('11A','4C','555D','67B','114B','9423C') どなたか教えてください。よろしくお願いいたします。

  • 【excel2003】特定の文字を含むセルと同じ行の別のセルの合計値の出し方,ご存じありませんか?

    5つの数字と1つのアルファベットを組み合わせて会員番号をつけています。並びは、A00001だったり000A01だったりで、アルファベットの位置が定まっていません。また、開始が0(ゼロ)の場合もあるので、エクセルではそのセルを「文字列」としています。 会員番号のアルファベットごとにグループ分けをして関係する数字の合計を出したいのですが、うまくいかなくて困っています。 データの並べ替えではアルファベット順にすることができません。 また、他の方の質問で、1つのセルにアルファベットと数字が入っているものを、別のセルにアルファベットと数字を別々に抽出するという方法が出ていたのですが、うまくいきません。 ご存じの方がいらっしゃいましたら、解決方法をご教示いただければ助かります。 どうぞよろしくお願いいたします。

  • エクセルの文字列並べ替えについて

    エクセルの文字列並べ替えについて エクセル2000です。 半角文字列の数字とアルファベットを通常のエクセルの機能で昇順で並べ替えた場合 012 013 111 1AA 1B1 211 222 22C 23A 2AB 2BC のように並ぶと思います。(ここでの数字は数値でなく、すべて文字列です) 数字→アルファベットの順番のようです。 これを「アルファベット」→「数字」の順番で並べ替える方法はないでしょうか? 以下のような順にです。 ユーザー定義のリストに基づいた並べ替えがあることは存じていますが、3桁だけでも英数混在だと36×36×36=46,656個のリストを登録しなければならないことになり、現実的と思えません。 目的は、ホストコンピュータから出力される紙のデータがなぜかこのような順で出てきて、それにエクセルで作成したデータをあわせる必要が出てきたためです。 012 013 1AA 1B1 111 2AB 2BC 211 22C 222 23A エクセルの一般機能でもVBAでもかまいません。ご教示いただけると幸いです。

  • スペースで別れたセル内の数値を若い順に並び替える

    A1= b62 3d 6e b7f A2 = s6c 2d 6e s7f とA列内の各セルに、2桁ないし3桁の文字列(左はsかbもしくはブランク、 真ん中は1から7までの整数、右はアルファベットaからfまで)が各4つ~6つ程あります。これを以下の規則に従って、セル内で並び替えることはできますか?マクロだと助かります。 規則は (1)真ん中の数字が若い順に並び替え (2)真ん中の数字が同じものが複数ある場合は右のアルファベットが若い順に並び替え (3)真ん中と右の数字が同じものが複数ある場合はb、ブランク、sの順に並び替え。 つまり A64= s7b b7b 7b 7c だったら A64=b7b 7b s7b 7c このように並び替えられるようにしたいのですが、可能でしょうか。

  • chrome extension を作りたい

    Google chrome extension 拡張機能を作りたい chrome extensionを使い、こんなプログラムを作りたいと思っています。 1.あるURLへアクセスし、そのページの中から特定の文字列をサーチ(文字列は、○○○(123)のように、日本語(数字)の形) 2.あらかじめ決めておいた文字列と照合し、一致したらそのページ内のボタンをクリックする 3.30秒ごとにURLを再読み込みし、上記1~2を繰り返す。 プログラミングはVBAをかじった程度なので、extensionの開発言語(html?)は素人です。 上記機能を実装した拡張機能を1から作る場合、どのような手順で学習していけばよいでしょうか。

    • ベストアンサー
    • HTML
  • フォルダーの中のファイルの順番を変えたい

    WindowsXPです フォルダの中にファイルを保存すると。 最初の文字が数字、アルファベット小文字、アルファベット大文字、カタカナ、漢字の順に自動的に保存されます。 この順番を 漢字、数字、カタカナ、アルファベット小文字・大文字の順に変更したいのですがどなたかその方法を教えてください。 特に 最初に漢字、2番目に数字にしたいのです。

  • Win32でInputBoxを実装するには?

    Win2000+ActivePerl 5.8.7 の環境です。 PerlでGUIということで、メッセージボックスであれば、次のようにして実現できました。 ------------ use Win32; my $msg = $ARGV[0]; my $icon = $ARGV[1]; my $caption = $ARGV[2]; my $result = Win32::MsgBox($msg, $ico, $caption); print "$result\n"; ------------ これと同様に、InputBoxのようなこと -------------------------------- ダイアログウィンドウを表示し、文字列の入力を促して、 Enterすると、スクリプト内の関数戻り値として、その文字列を 取得できるようなもの。 -------------------------------- が出来ないでしょうか。 ネット上色々と探し回ってみましたが、単純には見つかりませんでした。 ( Haven't yet implemented function inputbox...) 何か自分で組み合わせて作成する必要があるのでしょうか? (DOS窓経由であれば、単純に、$txt=<STDIN>; で取れるのですが) よろしくご教示ください。

    • ベストアンサー
    • Perl
  • jpgの文字表示?

    newsなどで画像を見ていますと、ときどき数字とアルファベットだけの画面に出くわします。拡張子はjpgです。 これって、文字化けですか? それとも、圧縮しているのですか? これを見る方法ってあるのでしょうか? もし見る方法があるのでしたら、ご教示ください。 フリーソフトがあると嬉しいのですが… よろしくお願いいたします。

  • エクセルで入力規則(リスト)の並べ替え

    入力規則をリストに設定してデータを入力した名称の(文字) 並べ替えをしたいのですが、50音順に並び替えられません。 ふりがなはちゃんと入っています。 データが数字だとリストから読みこんでも並び替えに問題はないようないようでした。 リスト解除をしても同じだったのですが、リストから呼んできた文字を50音順に並び替えることはできますか? 何か設定や手順がありますか? 宜しくお願いします。

このQ&Aのポイント
  • Windows 8.1から11に買い換えたパソコンで、PIXUS MP480を使用できるかどうかについて質問です。
  • また、CDドライブが付いていないため、ソフトウェアをダウンロードすることができるのかも教えていただきたいです。
  • それとも新しいプリンターを購入する必要があるのでしょうか。
回答を見る