简体   繁体   中英

How to check if input string is in correct format in C?

A want to check if input string is in right format

"%d/%d"

For example, when the input will be

"3/5"
return 1;

And when the input will be

"3/5f"
return 0;

I have idea to do this using regex, but I had problem to run regex.h on windows.

It is not completely clear what you mean by the format "%d/%d" .

If you mean that the string should be parsed exactly as if by sscanf() , allowing for 2 decimal numbers separated by a / , each possibly preceded by white space and an optional sign, you can use sscanf() this way:

#include <stdio.h>

int has_valid_format(const char *s) {
    int x, y;
    char c;
    return sscanf(s, "%d/%d%c", &x, &y, &c) == 2;
}

If the format is correct, sscanf() will parse both integers separated by a '/' but not the extra character, thus return 2 , the number of successful conversions.

Here is an alternative approach suggested by Jonathan Leffler :

#include <stdio.h>

int has_valid_format(const char *s) {
    int x, y, len;
    return sscanf(s, "%d/%d%n", &x, &y, &len) == 2 && s[len] == '\0';
}

If you mean to only accept digits, you could use character classes:

#include <stdio.h>

int has_valid_format(const char *s) {
    int n = 0;
    sscanf(s, "%*[0-9]/%*[0-9]%n", &n);
    return n > 0 && !s[n];
}

How to check if input string is in correct format... ?

A simple test is to append " %n" to a sscanf() format string to store the offset of the scan, if it got that far. Then test the offset to see if it is at the end of the string.

int n = 0;
int a, b;
//           v---v----- Tolerate optional white spaces here if desired.
sscanf(s, "%d /%d %n", &a, &b, &n);
if (n > 0 && s[n] == '\0') {
  printf("Success %d %d\n", a, b);
} else {
  printf("Failure\n");
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM