Say I have a string in the format "&x,&y,&z", is there a quicker way of validating it for 'correctness'
I'm trying to make a program which accepts the string in that format (Ampersand, integer of any length, comma, ampersand, integer of any length, comma, ampersand, integer of any length) and I've succeeded... but it's a state machine and the code is very very long and cumbersome.
Code:
if (opcheck[0] == '&')
{
current = 'b';
if (isdigit(opcheck[i])){i++; current = 'c';}
else flag = 1;
while (current == 'c')
{
if (isdigit(opcheck[i]))
{
i++;
}
else if (opcheck[i] == ','){i++; current = 'd';}
else {flag = 1; break;}
}
while (current == 'd')
{
if (opcheck[i] == '&'){i++; current = 'e';}
else {flag = 1; break;}
}
while (current == 'e')
{
if (isdigit(opcheck[i])){i++; current = 'f';}
else {flag = 1; break;}
}
while (current == 'f')
{
if (isdigit(opcheck[i]))
{
i++;
}
else if (opcheck[i] == ','){i++; current = 'g';}
else {flag = 1; break;}
}
while (current == 'g')
{
if (opcheck[i] == '&'){i++; current = 'h';}
else {flag = 1; break;}
}
while (current == 'h')
{
if (isdigit(opcheck[i])){i++; current = 'i';}
else {flag = 1; break;}
}
while (current == 'i')
{
if (isdigit(opcheck[i]))
{
i++;
}
else if (opcheck[i] == '\0'){i++; current = 'j';}
else {flag = 1; break;}
}
}
else flag = 1;
If the flag is 1 by the end, the validation has failed.
I looked up regular expression matching for C but it confused the crap out of me :-\