首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从字符串中得到一个又一个的数字?

从字符串中得到一个又一个的数字?
EN

Stack Overflow用户
提问于 2016-07-29 12:50:20
回答 2查看 63关注 0票数 0

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

我想检查一下它是否是结构,然后在d之后返回数字。

最有效的方法是什么?它能否仅使用scanf完成?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-29 12:55:25

您可以使用sscanf并检查返回值,如果它返回1,则一个整数已被成功读取(通过%d) --这与您需要的格式相匹配;否则t没有所需的格式。

代码语言:javascript
运行
复制
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" );
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-07-29 13:03:10

因为这个结构很简单,所以一些简单的检查和strol应该能做到这一点,比如:

代码语言:javascript
运行
复制
#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);

但你必须处理所有的边缘案件,以确保适当的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38659353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档