检查字符串是否匹配特定格式
Check if string matches a particular format
我有一个字符串定义为:
char *str
如何检查以验证字符串是否符合格式:
x-y-z
其中 x、y 和 z 都是 int 类型。
例如:字符串 1-2-4
应该是有效的,而 "1-2*3"
、"1-2"
、"1-2-3-4"
是无效的。
实现所需功能的一种简单方法是使用 scanf()
并检查返回值。像
ret = scanf("%d-%d-%d", &x, &y, &z);
if (ret == 3) {// match};
简单的方法就可以了。
这种方法不适用于多种数据类型和更长的输入,但仅适用于固定格式。对于更复杂的场景,您可能需要考虑使用正则表达式库。
如果您需要的不仅仅是匹配,还需要更多信息,那么您可以使用循环遍历字符串。我会给你一些入门代码。
int i = 0;
int correct = 1;
int numberOfDashes = 0;
while(correct && i < strlen(str)) {
if(isdigit(str[i])) {
}
else {
if(str[i] == '-') {
numberOfDashes++;
}
}
i++;
}
与 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
}
您可以使用 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,正如其他人已经说过的那样。
我有一个字符串定义为:
char *str
如何检查以验证字符串是否符合格式:
x-y-z
其中 x、y 和 z 都是 int 类型。
例如:字符串 1-2-4
应该是有效的,而 "1-2*3"
、"1-2"
、"1-2-3-4"
是无效的。
实现所需功能的一种简单方法是使用 scanf()
并检查返回值。像
ret = scanf("%d-%d-%d", &x, &y, &z);
if (ret == 3) {// match};
简单的方法就可以了。
这种方法不适用于多种数据类型和更长的输入,但仅适用于固定格式。对于更复杂的场景,您可能需要考虑使用正则表达式库。
如果您需要的不仅仅是匹配,还需要更多信息,那么您可以使用循环遍历字符串。我会给你一些入门代码。
int i = 0;
int correct = 1;
int numberOfDashes = 0;
while(correct && i < strlen(str)) {
if(isdigit(str[i])) {
}
else {
if(str[i] == '-') {
numberOfDashes++;
}
}
i++;
}
与 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
}
您可以使用 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,正如其他人已经说过的那样。