重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

forループ内にif文があり,それがtrueであった場合,処理(処理1)後breakでforループを抜けます。ループが完結するまでif文に引っかからないでループを抜けた場合,別の処理(処理2)をしたいのです。しかし,処理1をした場合,処理2はしたくありません。しかし,breakで抜けた後でも処理2が実行されてしまいます。ループ内のif文がtrueの場合,フラグを立てておいて,ループを抜けたところで,そのフラグが立っていたら処理2をしないようにすればできますが,スマートではありません。何かスマートな方法はないものでしょうか。forループ以外のループを使ってもかまいませんが。
具体的には,文字列0がabc.jpgだったら,文字列1(フォルダー名)をNULL,文字列2(ファイル名)をabc.jpgとし,文字列0がc:\dir1\folder1\defgh.jpgだったら文字列1をc:\dir1\folder1\とし,文字列2をdefgh.jpgとする処理をしたいのです。
後ろから\を探していって,見つかったらそこで文字列を分け,最後まで見つからなかったら,文字列1をNULLとし,文字列2を元の文字列にするプログラムを考えました。

質問者からの補足コメント

  • うーん・・・

    neko_deuxさん,コメントありがとうございました。
    No.1のお礼に書いたような一般的な方法を知りたかったのです。実は,具体的な例につきましては,strrchr()を用いて自分では満足行くコードを書くことができました。
    とにかく,forループ内にif文があり,ループの最後に至る前にif文を満足した場合は処理1だけを,ループの間,全くif文を満足しなかった場合処理2だけを実行する方法を知りたいのです。昔だったらgoto文を使っちゃいますがスマートではないですね。

    for(…){
     …
     if(…){
      処理1
      goto A
     }
     …
    }
    処理2
    (ラベルA)

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/09/06 20:40
  • へこむわー

    すみません,No.1のところで,補足に書くべき所をお礼に書いてしまいました。下の補足に書きましたが,strrchrを使って具体例はすでに解決しています。ただ,forループ内のifを満足した時処理1のみ,ifを満足しないでループが完結した時,処理2のみ実行するスマートな方法を知りたいのです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2019/09/06 20:46
  • No.12さんの回答は,「フラグを立てなくても,breakで抜けたか,forループを完結したか判断できるよ」ということでしたか。

    No.12の回答に寄せられた補足コメントです。 補足日時:2019/09/07 14:56

A 回答 (12件中11~12件)

> フラグを立てておいて,



割と良くある、シンプルな方法だとは思いますが。
forループ内の処理のifが増えるとかした場合も対応しやすい冗長性があるとも言えますし。


> 後ろから\を探していって,

例えば、
for(i=len(文字列0); 0<=i; i--)
みたいなループでしょうか。

途中で\が見つからなかった、breakしなかったなら、iが-1になってるかどうかで判断とか。
なんか、気持ち悪い感じがするって人もいるかもですが。
この回答への補足あり
    • good
    • 0

処理1、処理2は、具体例では、どれに相当するのでしょうか?

    • good
    • 0
この回答へのお礼

tatsu99さん,コメントありがとうございました。
[処理1](forループ中で後ろから検索して\が見つかったので,下の処理をして処理2をスキップして先に進む)
文字列0がc:\dir1\folder1\defgh.jpgだったら文字列1をc:\dir1\folder1\とし,文字列2をdefgh.jpgとする処理
[処理2](forループ内で\が見つからなかったので,forループが完結された)
文字列0がabc.jpgだったら,文字列1(フォルダー名)をNULL,文字列2(ファイル名)をabc.jpgとする。
となります。教えていただきたかったのは,「この様にforループ中にif文があり,それを満足したら処理1だけをし,forループ中にif文が最後まで満足しなかった場合処理2だけを実行するスマートな方法」です。

お礼日時:2019/09/06 20:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!