从字符串中获取字符后的数字?

时间:2016-07-29 12:50:21

标签: c

我有这个功能,检查输入是否类似于d1,d7,d65,等 - 意味着它以“d”开头,然后有一个数字。

我想检查一下它的结构,然后返回之后的数字

最有效的方法是什么?可以仅使用scanf完成吗?

2 个答案:

答案 0 :(得分:2)

您可以使用sscanf并检查返回值,如果它返回1则表示已成功读取整数(通过%d) - 并且符合您需要的格式;否则t没有所需的格式。

int read_fmt( char t[], int *n )
{
    return sscanf( t, "d%d", n );
}

int main ()
{
    char t[] = "d8787";
    int n = 0;
    if( read_fmt( t, &n ) == 1 )
    {
        printf( "correct format, n = %d\n", n );
    }
    else
    {
        perror( "incorrect format\n" );
    }
}

答案 1 :(得分:0)

由于结构很简单,一些简单的检查和控制应该可以做到这一点,例如:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

const char* input = "d1,d7,d65,d171";
bool error = false;
const char* ptr = input;

while (*ptr != '\0')
{
  // not starting with d so break with failure
  if (*ptr != 'd') { error = true; break; }
  // we must find a sequence of "number,..." or "number\0"
  else
  {
    // not any character available, break with failure
    if (++ptr == '\0') { error = true; break; }
    else
    {
        int v = strtol(ptr, &ptr, 10);

        // add error check for strtol

        printf("found: %d\n", v);

        // skip comma
        if (*ptr && *ptr == ',') ++ptr;
    }
  }
}

printf("error = %d\n", error);

但是你必须处理所有各种边缘情况以确保正确的行为。