cs中的sscanf - 只获取特定的数字/字符串

时间:2013-11-16 18:10:00

标签: c scanf

我有以下sscanf

int four;
sscanf("1234&awe$asdf@3222*gr45", format, four);

我希望此sscanf将值3222放入变量four中。 什么应该是format字符串?

& $ @*始终保持不变。所以字符串输入的其他例子可以是:

"6345&346dfh$aweg@5463*nvm" - > four5463

"0hjgf&456d$fhg@05645*pogyu" - > four05645

对不起,如果我不够清楚的话。我想尽可能地保持清晰。

编辑: 我认为方法是这样的:

sscanf("1234&awe$asdf@3222*gr45", "@%d*", four);

还有其他方法吗?

3 个答案:

答案 0 :(得分:2)

您的建议无法正常工作,您需要先将所有内容跳到@,所以"%*[^@]@%d"

答案 1 :(得分:2)

#include <cstdio>

int main() {
    int four = 0;
    sscanf("1234&awe$asdf@3222*gr45", "%*[^@]@%d%*s", &four);
    printf("%d\n", four);
    return 0;
}

要获得第二个号码,请执行以下操作:

sscanf("1234&awe$asdf@3222*gr45", "%*[^@]@%d%*[^0-9]%d", &four, &four1);

答案 2 :(得分:1)

@Nirock评论正在进行中。

int four;
// Anything not & (don't save it) followed by & then
// Anything not $ (don't save it) followed by $ then
// Anything not @ (don't save it) followed by @ then
// Anything not * (don't save it) followed by * then
// followed by an `int`
if (1 == sscanf(s, "%*[^&]&%*[^$]$%*[^@]@%*[^*]*%d", &four)) {
  ; // found it
}