A想检查输入字符串的格式是否正确
"%d/%d"
例如,当输入为
"3/5" return 1;
当输入信号
"3/5f" return 0;
我有想法使用regex来实现这一点,但我在Windows上运行regex.h时遇到了问题。
unhi4e5o1#
如何检查输入字符串格式是否正确......?一个简单的测试是将" %n"附加到一个sscanf()字符串中,以存储扫描的偏移量(如果扫描到了这个位置),然后测试偏移量,看看它是否在字符串的末尾。
" %n"
sscanf()
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"); }
x8diyxa72#
您并不完全清楚 format"%d/%d"是什么意思。如果你的意思是字符串应该像sscanf()一样被解析,允许2个十进制数字被/分隔,每个数字前面可能有白色和一个可选符号,你可以这样使用sscanf():
/
#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; }
如果格式正确,sscanf()将解析由"/“分隔的两个整数,但不解析额外的字符,因此返回2,即成功转换的次数。下面是乔纳森·莱弗勒(Jonathan Leffler)提出的另一种方法:
2
#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'; }
如果只接受数字,可以使用字符类:
#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]; }
2条答案
按热度按时间unhi4e5o1#
如何检查输入字符串格式是否正确......?
一个简单的测试是将
" %n"
附加到一个sscanf()
字符串中,以存储扫描的偏移量(如果扫描到了这个位置),然后测试偏移量,看看它是否在字符串的末尾。x8diyxa72#
您并不完全清楚 format
"%d/%d"
是什么意思。如果你的意思是字符串应该像
sscanf()
一样被解析,允许2个十进制数字被/
分隔,每个数字前面可能有白色和一个可选符号,你可以这样使用sscanf()
:如果格式正确,
sscanf()
将解析由"/“分隔的两个整数,但不解析额外的字符,因此返回2
,即成功转换的次数。下面是乔纳森·莱弗勒(Jonathan Leffler)提出的另一种方法:
如果只接受数字,可以使用字符类: