プロが教えるわが家の防犯対策術!

変数[26][2](配列)の値が"03"~"30"までの文字列の場合、という条件式を作成したいのですが、
if(strcmp(変数[0],"03")==0)||
strcmp(変数[1],"04")==0)||
省略
strcmp(変数[26],"30")==0)){

というのは思いついたのですが、行が多いため、for文でうまくできないでしょうか?
こんな感じなのは、思いついたのですが、あってますでしょうか?またもっと簡単な方法があれば
教えていただきたいです。

char 変数B[2];
for( int i = 0, i < 30,i++ ){
if( strcmp(変数[i],snprintf(変数B,sizeof(変数B),"%02d", i + 3))==0)){

A 回答 (4件)

大きさ 2 の配列に「"03"~"30"までの文字列」は入れられないのですが....



strtol とかを使っちゃダメなの?
    • good
    • 1

strcmp(変数[0],"03")==0)||


strcmp(変数[1],"04")==0)||
省略
strcmp(変数[26],"30")==0))

省略しちゃダメ。
間違いがあるぜ。
    • good
    • 0

[2]は[3]ですね。



まあ、どうしてもstrcmpを使いたいならそれですけど・・・

メモリを無駄に使っていいなら、領域全体をmemcmp()を使ってお手本と比較すれば、if文1回で済ませられるかも。
#if文の回数を減らす努力をするあたり、人間が古いかもしれませんが・・・

char 手本[26][3];
memset(手本, 0, sizeof(手本));
for (i=0; i < 26; i++) sprintf(手本[i], "%02d", i + 3);
......
if (memcmp(変数, 手本, sizeof(手本)) == 0) {
省略;
}

もちろん、領域が完全に必要な値だけで埋まる「この問題」だから使える手法ですけど。
    • good
    • 0

&& だったらいいんだけど, || なのでそれではダメなんですよ>#3.



文字列を使わない方法もあるけど, あんまりきれいじゃないしなぁ. 質問者さんの「思いついた」方法と #3 のように「テンプレートを予め作っておく」のとを組合せるかなぁ.
    • good
    • 0

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