给定一个字符数组,如何从该数组中取多个数字并将其赋值为int值?

时间:2014-04-06 19:50:19

标签: c arrays character strtol

所以说我有一个char数组

char *array = "hello my name is steven 123*3";

我希望从此表达式中提取123并将其放入int

我知道我可以做类似

的事情
int firstnum = array[15] - '0';

(假设1是数组中的第15个字符),这将给我firstnum = 1

但是我希望能够将整个123数字放到一个整数中,我不太清楚如何做到这一点。

感谢任何帮助

编辑:我刚刚发现了一些名为strtol的东西,但我不确定如何使用它。

我正在思考 long numberswanted = strtol(array [15],* p,10); 但是我怎么知道什么时候停止?或者,一旦你进入非int或非长期,它会停止吗?什么是* p?

2 个答案:

答案 0 :(得分:0)

尝试使用sscanf

  int n1 = 0, n2 = 0;
  char ch = 0;
  char *array = "hello my name is steven 123*3";
  sscanf(array, "%*[^0-9] %d %c %d", &n1, &ch, &n2);

这假定前缀字符串永远不会包含数字。 如果它可以包含一个数字,你可以从后面读取这样的东西(假设数据包括:前缀字符串,一个或多个数字,一个字符,一个或多个数字。

  int n1 = 0, n2 = 0;
  char ch = 0;

  char *array = "hello my name is steven 123*3";
  size_t i = strlen(array);

  while (--i >= 0 && isdigit(array[i]))
    ;
  sscanf(array+i+1, "%d", &n2);

  ch = array[i];

  while (--i >= 0 && isdigit(array[i]))
    ;
  sscanf(array+i+1, "%d", &n1);

答案 1 :(得分:0)

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

int main(){
    char *array = "hello my name is steven 123*3";
    int num;
    char *p;//p in strtol : Pointer of position where a character that can not be interpreted appeared. point to '*' after execution.
    num = strtol(array + strcspn(array, "0123456789"), &p, 10);

    printf("%d\n", num);

    return 0;
}