1

所以说我有一个这样的char数组

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

我想123从这个表达式中提取 并将其放入int.

我知道我可以做类似的事情

int firstnum = array[15] - '0';

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

但我希望能够将整个123数字变成一个整数,我不太确定如何做到这一点。

任何帮助表示赞赏

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

我在想 long numberwanted = strtol(array[15], *p, 10); 但是我怎么让它知道什么时候停止呢?或者一旦你到达一个非整数或非长整数,它会停止吗?什么是*p?

4

2 回答 2

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);
于 2014-04-06T19:55:59.427 回答
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;
}
于 2014-04-06T22:33:10.567 回答