No.8ベストアンサー
- 回答日時:
というわけで#6の修正
-------------------------
$list='aiueo';
$lastIndex = length($list) -1;
sub incStr($){
my $str = shift;
my $len = length $str;
my $carry=1;
my ($pos, $i);
for($i=0;$i<$len;$i++){
if($carry){
$pos=index($list, substr($str, -1-$i, 1));
if($pos == $lastIndex){
$carry=1;
substr($str, -1-$i, 1)= substr($list, 0, 1);
if($i == $len -1){
$str = substr($list, 0, 1) . $str;
}
} else {
$carry=0;
substr($str, -1-$i, 1) = substr($list, $pos + 1, 1);
}
} else {
last;
}
}
return $str;
}
#インクリメントのテスト
$data="a";
for($i=0;$i<=155;$i++){
print $data . "\n";
$data=incStr($data);
}
No.9
- 回答日時:
> #3は、0→あ になりませんね
while($num){
~
}
を
do{
~
}while($num);
に、するべきでした。
do-while はperlで使ったことなかったんで使えるか試すのを面倒がってしまいました。(カウンターだから 0 はいいかな、って勝手に決めて)
面白さで数値を文字にするなら数値→文字の変換に別の規則性を持たせてもいいかもしれませんね
0→れ 1→い 2→に … みたいに。
ほとんど意味を持たなくても、たまに
4649→よろしく になったらちょっと幸せかも。
そうなんですよねー。
普通のキリ番ゲットもあきられてきたなー、と。
なので、”あいあい”ゲット!とか、書き込んでくれたら、書きやすいしキリ番より数も多いし、その人のイメージもつかみやすいし、おもしろいかなー、と。
けっこう、私には難しく、勉強になりました。
大体、分かっていながら質問したのは、並列して違う人の書くスクリプトを見たかったからも、理由の一つです。
とても、参考&勉強、それにみなさんの丁寧な対応も見直さないといけないと思いました。では。
No.6
- 回答日時:
というわけで、題意を満たす(aoの次がaaa)もの
------------------------------------------------
$list='aiueo';
$radix = length $list;
sub n2s($){
my $num = shift;
return substr($list, 0, 1) x ($num / $radix) . substr($list, $num % $radix, 1);
}
sub s2n($){
my $str = shift;
my $len = length $str;
return ($len - 1)*$radix + index($list, substr($str,-1,1));
}
やっぱり、プログラムに精通した方はいらっしゃるんですねー。
私は、Perlも時たまですが、6,7年、PHPも半年くらい使ってますが、未だに辞書片手なのと、今まであるスクリプトは作らないので、四苦八苦してます。
オリジナルを作って配布とかではなく、作るのが楽しいからなんですが。
いやはや、感謝感謝♪
No.4
- 回答日時:
#2です。
#2は、題意を満たしてませんね。
ぼけてました、突っ込んでくれる人がいないので、自分ツッコミ。
いや、大丈夫です!!
自作のを使うか、数字から直接変換するかを悩んでいます。(w
とりあえず、自作のはちょっとだけシェイプアップ&Perlに移植できました。
もともと、数字が文字になれば特に気にするつもりはありませんでした。
「配列や、上記に書いた方法以外にもあれば、教えてください。」と書くのも忘れてましたし。(w
それを読み取れと言うのは、いささか無理があるし。
しかも見直したら、BLUEPIXYさんの敬称を忘れてました。
いやはや、BLUEPIXYさんに大感謝♪
No.3
- 回答日時:
こんな感じでしょうか。
#テスト用関数コール
my $count = 10;
$str = &NumToAiueo($count);
print "\n$count = $str\n";
# 10 = うあ
exit;
# こっから数値→かな変換
sub NumToAiueo {
my $num = shift;
my @aiueo = qw|あ い う え お|;
my $len = scalar @aiueo;
my $result;
while($num) {
my $kai = int ( $num / $len);
my $yo = $num - $kai * $len;
$result = $aiueo[$yo] . $result;
$num = ($num - $yo) / $len;
}
return $result;
}
そういえば、スクリプト自体はPHPで作ったけど、カウンターにするならPerlの方が楽だなー。
これまた簡潔な、スクリプトありがとうございます。
せっかく自分で作ったスクリプトをまるまる変えたい気分になってきました。(w
ただ、”あああ”がカウンター数の111とぞろ目の方が、おもしろいと言えばおもしろいけど、こっちの方が処理が軽そう。(w
No.2
- 回答日時:
質問者さんの問題は、
n進数→10進数
10進数→n進数
への変換の問題と同じです。
a,i,u,e,o が 0,1,2,3,4
に対応すると考えれば5進数の数値の相互変換と同じです。
だから、対応する記号を数値に置き換えて計算すればよいです。
Perlでも良いということなので、Perlでサンプルを作ってみました。
--------------------------------------------------------------------
use encoding 'shiftjis';
$list = 'あいうえお';
$radix = length $list;
sub n2s($){ #数値を該当する文字列に変換する
my $num = shift;
my $str = "";
while($num>=$radix){
$str = substr($list, $num % $radix, 1) . $str;
$num /= $radix;
}
$str = substr($list, $num, 1) . $str;
return $str;
}
sub s2n($){ #文字列を該当する数値に変換する
my $str = shift;
my $len = length $str;
my $i,$num;
for($num=0,$i=0;$i<$len;$i++){
$num=$num * $radix + index($list, substr($str, $i, 1));
}
return $num;
}
-----------------------------------------------------------------
$data = 'おお';
print n2s(s2n($data)+1);#文字を数値にして+1して文字に戻す
とすれば、
いああ
と表示されます。
日本語ひらがなを使う場合はPerl5.6以降で
英数字のみの場合は、特にバージョンに関係なく動くと思います。
英数字の場合はencodingの指定は必要ありません。
日本語の扱いで問題があるようなら
use encoding 'utf8';
を使ってください。(ソースコードをUTF-8で記述するの意)
なお、もともとPerlには文字列をインクリメントできる機能があります。
例えば、
$data="az";
とすると
$data++;
は、
ba
になります
ははは、そうでした。
当初の目的を忘れてました。
カウンターの方は、一桁目、二桁目、三桁目、、、の数字を別々に管理して、一つずつ足して、配列の総数になったら0に戻し、一桁上を一つ追加するの繰り返しの処理でなんとかなりました。
BLUEPIXYから比べたら、長くよけいな処理もありそうですが。
0 => a => a.gif => あ
75 => ri => ri.gif => り
15 => ga => ga.gif => が
34 => to => to.gif => と
で、No.1の方の回答にも書きましたが、アングラっぽい使い方の方。
今までは暗号はcryptを使ってたけど、これからはmd5とsubstrを使うようにします。
データはpl,php,cgiの拡張子のどれかにはしていたんですが、なんか怖くなりました。(w
No.1
- 回答日時:
今回、質問者さんがやられたいことは以下のような方法で可能だと思います
1.文字列の最後の文字を配列と順に比較
2.同じ文字があったところで、配列のその次の文字と置き換える
3.2のときに同じ文字が配列の文字の最後の文字ならば文字列の一つ前の文字列に対して、1-3を再度繰り返す
4.繰り返していて、文字列の先頭まで達し、かつその先頭の文字が配列の最後の文字ならば、その文字を配列の最初の文字にして、さらに文字列最初(最後どちらでもいい)に配列の最初の文字を加える
例1
文字列=aiu
後ろの文字 u
文字 u にマッチするので、次の文字eで置き換える
結果文字列= aie
例2
文字列=eio
後ろの文字 o
文字 o にマッチするので、文字aで置き換える
一つ前の文字 i
文字 i にマッチするので、文字uで置き換える
結果文字列= eua
例3
文字列=oo
後ろの文字 o
文字 o にマッチするので、文字aで置き換える
一つ前の文字 o
文字 o にマッチするので、文字aで置き換える
文字列の先頭に来たので文字aを加える
結果文字列=aaa
このような感じで、繰り返していけばお望みのものができるかと思います
がんばってください
この回答への補足
まだ、桁の追加方法や、その辺の処理がピンと来てませんが、、、。
っていうか、むしろそっちが分からん。
一応、PHPでも、PerlでもOKです。
ふと、これってUG系のソフトに使えちゃいますか?
いや、だったら早いJAVAやCで作るのが本流なんだろうけど。
あんまり詳しくは書かないけど、えーと解析とか?できるような気も。
利用法も限られるけど。
作って大丈夫っすかね?
面倒そうだから、やめようかなー。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- au(KDDI) au設定のログイン出来なくなりました 1 2023/01/30 13:25
- 英語 従属節であるwhen節と主節の2文について、内容からどちらを主節にするかの判断基準について 1 2023/01/04 14:50
- Word(ワード) Wordの目次作成についてです。 卒業論文で目次を作ることになりました。 本文は「見出し」の機能を使 1 2023/01/17 11:26
- 車検・修理・メンテナンス 車の希望ナンバーのひらがな部分について 5 2022/05/31 09:56
- デスクトップパソコン 認証コードが入力できない(同じ数字が次のマスにも勝手に入力される) 8 2023/01/27 12:53
- 中学校 間違った国語の実力テストの勉強? 1 2022/08/28 15:59
- Android(アンドロイド) スマホの日本語入力の選択肢を変えるには 4 2023/07/29 19:07
- AI・ロボット ChatGPTの文章作成アルゴリズムは、噂によると、ある単語や接続詞などがきたらその次に繋がる確率が 3 2023/06/05 21:19
- その他(クラウドサービス・オンラインストレージ) ChatGPTの行き末 4 2023/04/10 20:38
- 大人・中高年 発達障がいについて 6 2022/11/19 02:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCL言語で文字列検索方法を教え...
-
バイナリファイル中の日本語文...
-
%dなどの違い
-
16進数を2文字ずつ配列に格納し...
-
[C++]WCHARの1文字目しか表示で...
-
C言語の課題で困っています;
-
C#でstringをポインタとして渡す
-
nullと""、\\0とEOFの違いにつ...
-
文字コードによる表記
-
c#で他のアプリの文字入力フォ...
-
VB6.0でのバイナリデータの扱い...
-
プログラムによく出てくるst...
-
数字の入った配列をファイルへ...
-
Shift_JIS(16進)を文字に変換す...
-
C++で入力した文字列から数字を...
-
c言語のstrncpyについて
-
文字を反転させる。
-
アルファベットの出て来た回数
-
セグメントエラー
-
mallocについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#でstringをポインタとして渡す
-
プログラムによく出てくるst...
-
C++で入力した文字列から数字を...
-
nullと""、\\0とEOFの違いにつ...
-
c#で他のアプリの文字入力フォ...
-
TCL言語で文字列検索方法を教え...
-
16進数を2文字ずつ配列に格納し...
-
シリアル通信で0x00を送信した...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
WSH(VBS)でJSONの文字列を読み...
-
VB6.0でのバイナリデータの扱い...
-
C++で文字列の右端から特定の文...
-
数字の入った配列をファイルへ...
-
%dなどの違い
-
構造体→文字列→構造体 をする方法
-
char型配列の最大要素数
-
VBA-DLLの引数受け渡しについて
-
[C++]WCHARの1文字目しか表示で...
-
Shift_JIS(16進)を文字に変換す...
-
CSVファイルの「”」について
おすすめ情報