簡體   English   中英

如何將字符串中的數字序列添加到 c 中的 integer 數組中?

[英]How to add a sequence of numbers in a string to an integer array in c?

我所擁有的是一個帶有一些數字的字符串(數量未知,但有一個最大值),例如char string[] = "12 13 14 123 1234 12345"; 我想將每個數字添加到一個數組中。 所以假設我有一個數組int numbers[50]; 我想將它添加到數組中,所以它就像{12, 13, 14, 123, 1234, 12345}

我已經嘗試通過使用變量作為 state 機器的字符串循環來檢測它是否正在讀取一個數字,但代碼最終看起來像意大利面條,所以我只是失去了我的想法。 我不能使用malloc()或任何分配 memory 的東西來做這個練習。

有任何想法嗎?

給你。

#include <stdio.h>

int main(void) 
{
    enum { N = 50 };
    int numbers[N];
    
    char *s = "12 13 14 123 1234 12345";
    
    size_t  n = 0;
    char *p = s;
    
    for ( int value, pos = 0; n < N && sscanf( p, "%d %n", &value, &pos  ) == 1; p += pos )
    {
        numbers[n++] = value;
    }
    
    for ( size_t i = 0; i < n; i++ )
    {
        printf( "%d ", numbers[i] );
    }
    
    putchar( '\n' );
    
    return 0;
}

程序 output 是

12 13 14 123 1234 12345

state 機器的想法很好(盡管有點矯枉過正;畢竟你只有三個或四個狀態)。

您可以使用此算法和霍納算法來解析 integer。

- set Horner accumulator to 0 and HaveNumber to 0 (false).
- loop:
    - read character
    - if digit:
       - multiply Horner by 10
       - add the value of the digit to Horner
       - set HaveNumber to 1
       - continue
    - if HaveNumber:
         push Horner onto array
         set HaveNumber to 0
    - set Horner to 0
    - if character was a 0 instead of a space:
         break
   

這不需要 memory 並且不一定使用任何 function 調用(可以通過驗證 0x30 和 0x39 之間的數字的 ASCII 值來完成數字檢查)

您可以使用strtok將字符串拆分為子字符串,然后使用atoi將其轉換為整數。

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

int main()
{
    char my_string[] = "12 23 234 2345";
    int my_array[50] = {0};
    
    char* token = strtok(my_string, " ");
    int i = 0;
    while (token)
    {
        my_array[i] = atoi(token);
        token = strtok(NULL, " ");
        i++;
    }
    
    return 0;
}

暫無
暫無

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

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