2012-12-27 61 views
-2
1 13 3 4; 5 6 7 8; 9 10 11 12; 2 15 14 0 

如何從ANSI C中的字符串獲取數字?如何從這種類型的字符串中獲取數字C

我試圖把它與strtok的()分開:

char *vstup = argv[1]; 
char delims[] = ";"; 
char *result = NULL; 
result = strtok(vstup, delims); 

while(result != NULL) { 
    printf("result is \"%s\"\n", result); 
    result = strtok(NULL, delims); 
} 

,我得到這個:

result is "1 13 3 4" 
result is " 5 6 7 8" 
result is " 9 10 11 12" 
result is " 2 15 14 0" 

現在我不知道如何得到的整數數字,並將它們保存在兩個維矩陣(矩陣)。我需要的是這樣的:

field[1][1] = 1 
. 
. 
. 
etc. 

我想了解一下的atoi(),但我不知道,如果它會識別,例如「13」作爲一個數..

+0

你爲什麼不試試它? –

+0

這看起來像一個家庭作業。 –

+0

程序如何設置?你怎麼稱呼它?給一些更多的細節。 –

回答

2

使用偶數空格作爲分隔符。例如,在你的情況下,這個代碼把數字放在尺寸爲4x4的二維數組中

#include<stdio.h> 
#include<string.h> 

void main() 
{ 
char a[] = "1 13 3 4; 5 6 7 8; 9 10 11 12; 2 15 14 0"; 
int i=0 ,j=0 , x; 
int array[4][4]; 
char *temp; 
temp = strtok(a," ;"); 
do 
{ 
    array[i][j] = atoi(temp); 
    if(j == 4) 
    { 
     i++; 
     j = 0; 
    } 
    j++; 
}while(temp = strtok(NULL," ;")); 

for(i=0; i<4; i++) 
{ 
    for(j=0; j<4 ;j++) 
    { 
     printf("%d ",array[i][j]); 
    } 
    printf("\n"); 
} 
} 
2

你可以做你完成同樣的事情去剝奪';'但是也可以使用''作爲空格。把這個結果放到一個數組中,你可以在整個數組上使用atoi或任何你想要的。如果你想把它放到一個二維數組中,你可以將字符串分割成';'然後在該循​​環內將每個整數分割成您想要的數組的任何部分。不會寫代碼,因爲它看起來像作業。

1

的方法之一是使用的sscanf:

char* input = ...; 
while(*input) { 
    input += ';' == *input; 
    int a, b, c, d, n = -1; 
    sscanf(input, "%d %d %d %d%n", &a, &b, &c, &d, &n); 
    if(n < 0) 
     // parsing error 
    // parsed successfully into a, b, c, d 
    input += n; 
} 

注意,輸入字符串保持不變在這裏。

相關問題