dポイントプレゼントキャンペーン実施中!

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

A 回答 (7件)

Perlなどではこういうのは正規表現で


if ( str =~ /(a|b|c)/ )

なんていうように書けます.
C言語でも正規表現を使うためのライブラリはある
(正規表現,C言語などのキーワードで検索して探してください)
ので,それを探して使うのもありかもしれません.
    • good
    • 0

strの型は何でしょう?



std::string型やCString型のような文字列型の場合と、char型やint型の場合と、それ以外の場合では対応が異なります。
ジェネリックプログラミングやマクロなどで、型を意識せずに使いたいということであれば、まとめられないと思います。

ところで、'a'~'c'の連続性は規格上保証されていませんので、それらの連続性を期待したまとめ方をするのであれば、処理系を限定する必要があります。
    • good
    • 0

if(strchr("abc",str))

    • good
    • 0

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

    • good
    • 0

if ( !( str - 'a' ) + !( str - 'b' ) + !( str - 'c' ) ) {



でもいけるんじゃない?

ちなみに、質問のif()では比較は最大3回、#1の回答では比較は2回、#2の回答では比較は最大3回。
#2のswitch()-case文を使った場合、最適化によってはもっと少なくなるかも。
私の回答では、比較は1回。
    • good
    • 0

switch( str ){


case 'a':
case 'b':
case 'c':
/* do */
}

――とか。
    • good
    • 0

連続したもの(a,b,c)の場合は下記が使えます。



if(str >= 'a' && str <='c'){
    • good
    • 0

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