2011-10-18 7 views
0

私は、年と月を含むchar *を使ってYYYYMMと言うことができます。 01〜12の範囲でMMをどのように比較できますか?部分文字列のためにatoiを実行しなければならないのですか?char配列の部分文字列と有効な範囲を比較する方法は?

+0

C++では、一般的に構築することができ、日付オブジェクトを使用するか、または設計する方が良いだろうさまざまなフォーマット。 – AJG85

答えて

1

文字列の月部分の最初の文字が「0」の場合、2番目の文字は有効であるために '1'から '9'の間になければなりません。最初の文字が '1'の場合、2番目の文字は有効であるために '0'と '2'の間になければなりません。その他の初期文字は無効です。

コードで

bool valid_month (const char * yyyymm) { 
    return ((yyymm[4] == '0') && (yyymm[5] >= '1') && (yyymm[5] <= '9')) || 
     ((yyymm[4] == '1') && (yyymm[5] >= '0') && (yyymm[5] <= '2')); 
} 
+0

DavidとLouのおかげです。それは助けになった! – user1001939

+0

有効な境界のタイプミスと仮定のほかに、これは正しいアイデアです。 – AJG85

0

あなたは、サブストリングのatoi関数()を行うこともできますし、単にASCII値を比較することができます。例:

if (buf[4] == '0') 
{ 
    // check buf[5] for values between '1' and '9' 
} 
else if (buf[4] == '1') 
{ 
    // check buf[5] for values between '0' and '2' 
} 
else 
{ 
    // error 
} 

どちらの方法でもかまいません。私は実際にあなたが最終的にどのように情報を(intまたは文字列として)格納するかに依存していると思います。

-1

*変数は「PSTR」と呼ばれ、あなたが行うことができますMMの後にヌル終了し、あなたの文字と仮定すると:

int iMon = atoi(pstr + 4); 
if ((iMon >= 1) && (iMon <= 12)) 
{ 
    // Month is valid 
} 
+0

-1:このアプローチでは、 "20111Z"と "" 19999# "が有効であると言えます。 –

関連する問題