- ベストアンサー
if(str=='a' || str=='b' || str=='c')これまとめられませんか?
題名どおりなんですが短縮してかけませんか?
- みんなの回答 (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 ) )
- Ekukos_bloomers
- ベストアンサー率15% (19/123)
回答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
回答No.1
連続したもの(a,b,c)の場合は下記が使えます。 if(str >= 'a' && str <='c'){