我正在研究使用sscanf()检测输入的实现。 输入将包含连字符“-”,也可以不包含连字符。字符串的长度和连字符的位置将有所不同。 例子:
"18509726-550"
"14782"
我一直在尝试为带连字符的字符串想出一个返回值> 0的格式字符串,但对于没有连字符的字符串却想返回> 0,但是我没有成功。这可能是不可能的。我还意识到,有很多更好的方法可以实现此目的,但是这段代码是在我写这篇文章之前写的。
代码:
// what format string will return 0 for one but not the other?
String^ pszString = "18509726-550"; // or "14782"
int nP;
char buffer[256];
char buffer1[256];
const char* pSrc = (gcnew marshal_context())->marshal_as<const char*>(pszString);
nP=sscanf(pSrc, "%[-]s", buffer, buffer1);
我尝试了几种格式字符串:
"%s-%s"
"%[0-9-]s"
"%[-]s"
"%[^-]s"
我已经找到了所有可以找到的sscanf文档,我认为单独使用sscanf是不可能的,但是验证也有帮助。 谢谢SO社区!
答案 0 :(得分:0)
[]
已采用s
格式。
只需使用"%[^-]-%[^-]"
。
#include <stdio.h>
void test(const char* s)
{
char s1[100]{}, s2[100]{};
int n = sscanf(s, "%[^-]-%[^-]", s1, s2);
printf("%d: %s, %s\n", n, s1, s2);
}
int main()
{
test("18509726-550");
test("14782");
}
打印:
2: 18509726, 550
1: 14782,