簡體   English   中英

可變長度的字符串到int數組?

[英]String of variable length to int array?

我有一個字符串,其形式為“ 1 2 8 4 9 0”等。我知道它將遵循整數,空格,整數的格式。

但是,我不能保證長度。 我知道最大長度,如果有幫助的話。 我以為使用sscanf,但它需要有限數量的整數。

任何想法如何將“ 1 2 3”變成一個數組

A [0] = 1

A [1] = 2

A [2] = 3

謝謝!

strtol指示字符串失敗的位置。
對於類似"1 2 3 ..."的字符串,它將讀取1並隨后失敗; 如果您隨后將該故障點( " 2 3 ..." )傳遞給strtol ,它將讀取2並在此之后立即故障,...,...

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

int main(void) {
  char input[] = "6 82 -7453 4 0 63 ";
  char *err = " ", *curr = input;
  int x, k = 0;
  while (*curr && isspace((unsigned char)*err)) {
    x = strtol(curr, &err, 10);
    printf("#%d: %d\n", k++, x);
    curr = err + !!*err; // do not advance past the '\0'
  }
  return 0;
}

實際操作中看到它 -與上面的代碼段不同,ideone處的代碼使用1:/初始化k ,並且對以空格結尾的輸入處理不佳。

采用

rc = sscanf(string, "%d%n", &array[i], &len);

在一個循環中。 測試rc,然后使用len跳到下一項。

其實並不那么復雜:

  1. strlen計算字符串的長度
  2. 使用malloc為數組分配足夠的內存
  3. 再次遍歷字符串並填充數組

看到它在行動

許多方法之一是使用strtok以空格分隔符來對字符串進行標記,並且每個strtok調用的返回值都可以與sscanf用於單個整數。 如您所知,最大長度可以在這些行中的某些對象上與sscanf一起迭代數組。
希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM