21xrx.com
2024-11-22 06:02:39 Friday
登录
文章检索 我的文章 写文章
C语言中提取字符串中的数字
2023-06-16 16:30:25 深夜i     --     --
C语言 字符串 提取数字

在C语言中,如何从一个字符串中提取出数字是一个常见的问题。下面介绍几种方法。

方法一:使用sscanf函数

sscanf函数可以根据指定的格式从字符串中提取出需要的信息。

比如,我们有一个字符串str,里面包含了一个数字,我们可以使用以下代码提取出这个数字:


char str[] = "这是一个包含数字123的字符串";

int num;

sscanf(str, "%*[^0123456789]%d", &num);

其中,“%*[^0123456789]”表示忽略字符串中除了数字以外的所有字符,“%d”表示提取出整数类型。

方法二:使用strtol函数

strtol函数可以将字符串转换为长整型,并返回其数值。

比如,我们有一个字符串str,里面包含了一个数字,我们可以使用以下代码提取出这个数字:


char str[] = "这是一个包含数字123的字符串";

char *p;

long num;

num = strtol(str, &p, 10);

其中,“strtol(str, &p, 10)”表示将字符串str转换为长整型,并将字符串中被转换的数字后第一个字符的地址赋给p。

方法三:使用正则表达式(需引入regex.h头文件)

正则表达式可以更加灵活地处理字符串。下面用一个例子来说明。

比如,我们有一个字符串str,里面包含了多个数字,我们想要提取出所有的数字:


char str[] = "这里有123个数字,456个数字,789个数字";

regex_t reg;

regcomp(®, "(\\d+)", REG_EXTENDED);

regmatch_t pm[1];

while(regexec(®, str, 1, pm, 0) == 0)

{

  char temp[256];

  memset(temp, 0, sizeof(temp));

  strncpy(temp, str + pm[0].rm_so, pm[0].rm_eo - pm[0].rm_so);

  int num = atoi(temp);

  printf("%d ", num);

  str += pm[0].rm_eo;

}

regfree(®);

其中,“(\\d+)”表示一个或多个数字,“regcomp”函数是编译正则表达式,“regexec”函数是执行正则表达式匹配,“pm[0].rm_so”表示匹配的起始位置,“pm[0].rm_eo”表示匹配的结束位置。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复