fork(2) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <regex.h>
  5.  
  6. int main(void) {
  7. regex_t reg;
  8. if (regcomp(&reg,"^(M{0,3})"
  9. "(D?C{0,3}|CM|CD)"
  10. "(L?X{0,3}|XC|XL)"
  11. "(V?I{0,3}|IX|IV)$", REG_EXTENDED | REG_ICASE))
  12. exit(EXIT_FAILURE);
  13.  
  14. char string[100];
  15. while (fgets(string, sizeof string, stdin)) {
  16. int len = strcspn(string, "\r\n");
  17. string[len] = '\0'; // chomp string
  18. if (len+1 != sizeof string) {
  19. int invalid = (len == 0 // empty input is invalid
  20. || regexec(&reg, string, 0, NULL, 0));
  21. printf("'%s' is %svalid\n", string, invalid ? "in" : "");
  22. } else {
  23. fputs("input is too large\n", stderr);
  24. exit(EXIT_FAILURE);
  25. }
  26. }
  27. regfree(&reg);
  28. return !feof(stdin);
  29. }
  30.  
Success #stdin #stdout 0s 9424KB
stdin
XII
XI
IX
IIX
IL

iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
xii
stdout
'XII' is valid
'XI' is valid
'IX' is valid
'IIX' is invalid
'IL' is invalid
'' is invalid
'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii' is invalid
'xii' is valid