为什么这是错的? C ++分析日期和时间

时间:2014-08-07 12:45:31

标签: c++

我一直在编写一个函数来分析字符串的日期和时间,但我看不出我出错的地方。

无论输入什么日期或时间,例如99/99/9999 99:99给出的值为0到z。它似乎是一个非常简单的代码和令人难以置信的漫长的方式,所以我认为我犯了一个简单的错误。你可以看看我,这将是非常有帮助的。#

我唯一的想法是,因为它是一个字符串而不是整数,这不是注册,因此导致错误,但我用来修复它的代码

istringstream(MyString的)GT;> T&安培; d;

什么都没做。

if (pos != string::npos)
        {
        mystring=mystring.erase (0,13);
                       {      
                         int z=0;

                         if (isalpha(mystring[0])) z+1;
                         cout << z << endl;
                         if (isalpha(mystring[1])) z+1;
                         if (isalpha(mystring[3])) z+1;
                         if (isalpha(mystring[4])) z+1;
                         if (isalpha(mystring[6])) z+1;
                         if (isalpha(mystring[7])) z+1;
                         if (isalpha(mystring[8])) z+1;
                         if (isalpha(mystring[9])) z+1;
                         if (isalpha(mystring[11])) z+1;
                         if (isalpha(mystring[12])) z+1;
                         if (isalpha(mystring[14])) z+1;
                         if (isalpha(mystring[15])) z+1;

                         if (mystring[0] > 3)  z+1;
                         cout << z << endl;  
                         if (mystring[3] > 1)  z+1;  
                         if (mystring[6] != 2)  z+1;    
                         if (mystring[7] != 0) z+1;      
                         if (mystring[8] != 1)  z+1;       
                         if (mystring[9] != 4)  z+1;
                         if (mystring[11] > 2)  z+1;
                         if (mystring[14] > 6)  z+1;


                       cout << mystring << "\n" << z << endl;

                            if (z != 0 ) {cout << "Please enter a valid Date & Time" << endl;}


                       }

2 个答案:

答案 0 :(得分:0)

z+1只是一个值,比z多一个。它不会增加z;

您可能需要++z;

在你的陈述中。 if(mystring[0] > 3(作为示例)您实际上将char与数字(等效的8位整数)进行比较。如果你实际上意味着字符'3'不是同一个值。

顺便说一句,您可能会发现使用正则表达式更容易完成上述所有操作。

答案 1 :(得分:0)

这可能是你想要的:

if(pos != string::npos) 
{
    mystring = mystring.erase(0, 13); 
    int z = 0;
    for(int i = 0; i < mystring.Length(); i++)
    {
        if(isalpha(mystring[i])) z++;
    }
    if((int)mystring[0]-'0' > 3) z++;   //(int)mystring[0]-'0' converts it to int.
    if((int)mystring[3]-'0' > 1) z++;
    if(mystring[6] != '2') z++;        //No conversion needed for !=
    if(mystring[7] != '0') z++;
    if(mystring[8] != '1') z++;
    if(mystring[9] != '4') z++;
    if((int)mystring[11]-'0' > 2) z++;
    if((int)mystring[14]-'0' > 6) z++;

    if(z != 0) 
    {
     cout << "Please enter a valid Date & Time" << endl;
    }
}

(for循环优于100万ifs并更改为z++而不是z+1