• ベストアンサー

if(str=='a' || str=='b' || str=='c')これまとめられませんか?

題名どおりなんですが短縮してかけませんか?

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

  • ベストアンサー
  • logicule
  • ベストアンサー率100% (2/2)
回答No.7

Perlなどではこういうのは正規表現で if ( str =~ /(a|b|c)/ ) なんていうように書けます. C言語でも正規表現を使うためのライブラリはある (正規表現,C言語などのキーワードで検索して探してください) ので,それを探して使うのもありかもしれません.

その他の回答 (6)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.6

strの型は何でしょう? std::string型やCString型のような文字列型の場合と、char型やint型の場合と、それ以外の場合では対応が異なります。 ジェネリックプログラミングやマクロなどで、型を意識せずに使いたいということであれば、まとめられないと思います。 ところで、'a'~'c'の連続性は規格上保証されていませんので、それらの連続性を期待したまとめ方をするのであれば、処理系を限定する必要があります。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

if(strchr("abc",str))

  • krisc
  • ベストアンサー率57% (12/21)
回答No.4

if( (unsigned)str-'a' < 3 ) )

回答No.3

if ( !( str - 'a' ) + !( str - 'b' ) + !( str - 'c' ) ) { でもいけるんじゃない? ちなみに、質問のif()では比較は最大3回、#1の回答では比較は2回、#2の回答では比較は最大3回。 #2のswitch()-case文を使った場合、最適化によってはもっと少なくなるかも。 私の回答では、比較は1回。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

switch( str ){ case 'a': case 'b': case 'c': /* do */ } ――とか。

noname#29127
noname#29127
回答No.1

連続したもの(a,b,c)の場合は下記が使えます。 if(str >= 'a' && str <='c'){

関連するQ&A