HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0119
TNE文字列検索6解決


TNE

リンク

2009/1/19(Mon) 23:30:33|NO.22955

文字列の検索を作っているんですが、()を対として
()()なら2個、(()())()なら4個といったような
()の数を返す方法を教えていただけませんか。



この記事に返信する


SYAM

リンク

2009/1/19(Mon) 23:42:00|NO.22956

変数 a , b , cを用意して、文字列の先頭から1字ずつ調べます。

"("を見つけたら a=a+1 : b=b+1

")"を見つけたら a=a-1 : if a=0 : c=c+b : b=0

さいごまで調べ終わったら c が求める数になってます。

また、
さいごまで調べ終わったときに a=0 になっていなかったら、"("と")"の数が合っていないことになります。
また、途中で一度でも a<0 になったら、その時点で ")"が余分にあることがわかります。



ほげ

リンク

2009/1/20(Tue) 01:21:54|NO.22957

こういうときは男と女で考えるとわかりやすい(?

↓カップルの数カウンタ

#module #deffunc parcount var src num = 0 // カップルの数を入れる変数 doku = 0 // 独身♂の数を入れる変数 repeat strlen(src) read = peek(src,cnt) if read == '('{ // ♂を発見したら、独身♂の数を1増やす doku++ }else:if read == ')'{ // ♀を発見したら独身♂がいるか確認 if doku > 0{ // 独身♂がいればカップル成立 doku-- // 独身♂の数を1減らし num++ // カップルの数を1増やす } } loop return num #global // テスト -------------------------------------- strings = "(()())()" parcount strings mes stat



TNE

リンク

2009/1/20(Tue) 20:56:40|NO.22960

ありがとうございます。
instrを使って作っていたんですがうまくいかなくて、
そちらの方法を使わせていただいたら問題なく動きました。



××

リンク

2009/1/20(Tue) 20:58:22|NO.22961

ん・・・?
普通に

"(" と ")" の数をそれぞれ調べて
一致したらそれが()の数
一致しなければ文法に誤りがある

でいいのでは?



TNE

リンク

2009/1/21(Wed) 04:25:34|NO.22969

解決を押してしまいましたがここに書いていいのかな。
()の個数を返す内容ではないんですが、対となる()を正確に認識して、
例えば(1(2)(3))(4)と書いてあるとき、
(1)内にある(2)(3)は(1)のグループの1つ下に表示するといったような
プログラムはできないでしょうか。
(1(2)(3))(4)なら   (1(2(3))(4))なら
 (1) (4)        (1) 
 ↓           ↓
(2)(3)        (2) (4)
           ↓
           (3)     (数字は別に必要ないです。)
説明が下手ですみません。



やみねこ

リンク

2009/1/21(Wed) 09:03:18|NO.22972

再起処理について調べたら、良い方法が見つかりそうに思いました。

どんな言語でも、ローカル変数をスタックする領域は決まっているようなので、
制限はあるのでしょうけど...

でも、HSPの再起出来る回数って少ないようで(200回程度?)
あまり複雑なものは出来ないかもしれません。



ONION software Copyright 1997-2023(c) All rights reserved.