-1

私は2つの関数を書かなければなりません。日付を文字列として受け取り、mm/dd/yy 形式かどうかをチェックするもの。正しい形式でない場合は、編集して正しい形式にする必要があります。もう 1 つの関数は、検証された日付を「Month dd, 20yy」の形式に変換する必要があります。

2 番目の関数は処理できると確信していますが、最初の関数で問題が発生しています。その形式であるかどうかを確認する方法がわかりません...何かアイデアはありますか?

これでうまくいくと思ったのですが、うまくいかないようです...

更新されたコード:

bool dateValidation(string shipDate)
{
    string temp;
    if(shipDate.length() == 8 )
    {
        if(shipDate[2] == '/' && shipDate[5] =='/')
        {
            int tempDay, tempMonth, tempYear;
            //Gather month
            temp = shipDate[0];
            temp += shipDate[1];
            //convert string to int
            tempMonth = temp.atoi;
            temp = "";

            //Gather day
            temp = shipDate[3];
            temp += shipDate[4];
            //convert string to int
            tempDay = temp.atoi;
            temp = "";

            //Gather year
            temp = shipDate[6];
            temp += shipDate[7];
            //convert string to int
            tempYear = temp.atoi;
            temp = "";

            if(tempMonth > 0 && tempMonth <= 12)
            {

                if(tempMonth == 9 ||
                   tempMonth == 4 ||
                   tempMonth == 6 ||
                   tempMonth == 11 ||)
                {
                    if(tempDay > 0 && tempDay <= 30)
                    {
                        if 30 days
                            }
                }
                else if(tempMonth == 2)
                {
                    if(tempDay > 0 && tempDay <= 28)
                    {
                        if 28 days
                            }
                }
                else
                {
                    if(tempDay > 0 && tempDay <= 31)
                    {
                        if 31 days
                            }
                }
            }
        }
    }
}
4

2 に答える 2

0

確認したいことが4つあります。

  • 8文字ありますか?そうでない場合は、他に何もチェックする必要はありません。適切な形式ではありません。
  • 3番目と5番目の文字は「/」です。そうでない場合でも、適切な形式はありません。
  • 各ペアの有効な値を確認してください。1か月の日数は最大で1〜31日で、12か月以内で、月の範囲は01〜12です。1年は任意の2桁の任意の組み合わせにすることができます。

これでフォーマットを処理する必要がありますが、日付が有効であることを確認する場合は、次のようにします。

  • 毎月の有効な日数(1月31日、2月28日から29日...)を確認し、実際にうるう年を確認してください。
于 2012-11-20T02:30:00.160 に答える
0

これは、私が採点しようとしているプロジェクトによく似ています.... 私が採点しようとしているプロジェクトである場合は、それがグレゴリオ暦に準拠していることを確認する必要があります。1/1/2012 は間違いなく有効ですが、これらは有効であるため、1/12/2012 や 10/2/2012 などの形式を調べる switch ステートメントを作成することを検討してください。次に、これらから月日と年を解析します。次に、それらがグレゴリオ暦の制限内にあることを確認します。私が推測するクラスの場合は、解析関数とは別の関数として検証を記述することを検討する必要があります。

したがって、最初に日付が長すぎるかどうか、短すぎるかどうか、そうでない場合はバージョンを確認してから、dmy を検証関数に渡します。この種のモジュール性により、コードが簡素化され、命令が削減されます。

何かのようなもの

bool dateValidation(string shipDate) { string temp;

switch(shipDate.length())
{
     case(10):
        // do what  your doing
        verify(m,d,y);
        break;

     case(8):
        //dealing with single digits
        // verify 1 and 3 are '/' and the rest are numbers
        verifiy(m,d,y);
        break;

     case(9):
        //a little more heavy lifting here 
        // but its good thinking for a new programmer
        verifiy(m,d,y);
        break;
     default:       

      //fail message
        break;
}
于 2012-11-20T04:38:29.673 に答える