我一直在编写一个函数来分析字符串的日期和时间,但我看不出我出错的地方。
无论输入什么日期或时间,例如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;}
}
答案 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
)