我有一个字符串定义为:
char *str
如何检查以验证字符串是否与格式匹配:
x-y-z
其中x,y和z的类型均为 int 。
例如:1-2-4
,"1-2*3"
,"1-2"
无效时,字符串"1-2-3-4"
应该有效。
答案 0 :(得分:3)
实现所需内容的一种简单方法是使用scanf()
并检查返回的值。像
ret = scanf("%d-%d-%d", &x, &y, &z);
if (ret == 3) {// match};
对于一个简单的方法会很好。
此方法不适用于多种数据类型和更长的输入,但仅适用于固定格式。对于更复杂的场景,您可能需要考虑使用正则表达式库。
答案 1 :(得分:0)
如果您需要的信息不仅仅是匹配,那么您可以使用循环遍历字符串。我会给你一些入门代码。
int i = 0;
int correct = 1;
int numberOfDashes = 0;
while(correct && i < strlen(str)) {
if(isdigit(str[i])) {
}
else {
if(str[i] == '-') {
numberOfDashes++;
}
}
i++;
}
答案 2 :(得分:0)
与Sourav的答案一致。
int check( char t[] )
{
int a, b, c, d;
return sscanf( t, "%d-%d-%d-%d", &a, &b, &c, &d ) == 3;
}
int main()
{
char s[] = "1-2-4";
char t[] = "1-2-3-4";
printf( "s = %s, correct format ? %s\n", s, check( s ) ? "true" : "false" ); // <-- true
printf( "t = %s, correct format ? %s\n", s, check( t ) ? "true" : "false" ); // <-- false
}
答案 3 :(得分:0)
您可以使用sscanf
作为特定的字符串示例。
int main()
{
int x,y,z;
char *str="1-2-4";
int a = sscanf(str, "%d-%d-%d", &x, &y, &z);
printf( "%s", (a == 3) ? "Correct format":"Incorrect format");
return 0;
}
虽然sscanf
格式不适用于这些指定的字符串:
int main()
{
int x,y,z;
char *str="1-2*3"; //or "1-2" or ""1-2-3-4""
int a = sscanf(str, "%d-%d-%d", &x, &y, &z);
printf( "%s", (a == 3) ? "Correct format":"Incorrect format");
return 0;
}
为了避免这种情况,您需要使用其他人已经说过的regular expressions。