[英]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.