Cześć wszystkim.
Otóż w zmiennej typu char znajduje się jakiś tekst. Chciałbym go porównać tak aby był prawidłowy według określonej sekwencji znaków. Chodzi o to, że ma być sprawdzenie czy tekst jest w formie takiej: |10|20|3|100|
. Najważniejsze jest to, żeby były prawidłowe tylko dwa znaki |
a pomiędzy nimi liczba dziesiętna. Takich ciągów znaków może być nieskończenie wiele np: |1|40|100|50|6|50|n|n|n|n|n|
Dodam jeszcze, że pomiędzy znakami | mogą być tylko maksymalnie 3 cyfry. Udało mi się wyskrobać takie coś jak poniżej. Jest to rozwiązanie dla jednego znaku pomiędzy sekwencją |
czyli |2|3|
. Meczę się aby zrobić to dla 3 znaków, ale tak żeby można było sprawdzić również jeden znak lub dwa czyli np: |2|10|200|
lub |20|5|100|
itp. Tracę powoli pomysły. Co piszę kod to go zmazuje lub nie działa. Co zrobić aby zadziałało tak jak tego chcę? Wyrażenia regex nie wchodzą w grę ponieważ moje środowisko pracy tego nie obsługuje
#include "stdarg.h"
#include "string.h"
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool validate(char* tab)
{
bool isNumericMode = false;
bool lastNumericCheck = false;
char* ptr = tab;
while (*ptr != 0)
{
if (!isNumericMode) {
if (*ptr != '|') return false;
isNumericMode = true;
lastNumericCheck = true;
} else {
lastNumericCheck = false;
if (isdigit(*ptr)) isNumericMode = false;
else return false;
}
ptr++;
}
return lastNumericCheck;
}
int main()
{
char cmd[] = "|5|3|";
printf("%d", validate(cmd));
}