【问题标题】:Given an array of characters, how can i take multiple digits from this array and assign it to an int value?给定一个字符数组,我如何从这个数组中取出多个数字并将其分配给一个 int 值?
【发布时间】:2014-04-06 19:50:18
【问题描述】:

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

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?

【问题讨论】:

  • array[15] 是“s”。 15是错误的位置。 strtol(array[15], *p, 10); : array[15]char,而不是 char*

标签: c arrays character strtol


【解决方案1】:

尝试使用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);

【讨论】:

  • 我对此有点困惑,我的号码到底存储在哪里?我希望能够对之后的数字进行计算,strtol 或 sscanf 会更好吗?
  • 在上述任一sn-ps中,字符串末尾的第一个数字在n1,第二个数字在n2。假定它们由单个字符分隔,该字符被读取并存储在ch 中。
【解决方案2】:
#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    相关资源
    最近更新 更多