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

ANSI 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"  

今、私は整数で数値を取得し、それらを2次元フィールド(行列)に保存する方法がわかりません。私はこのようなものが必要です:

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

atoi()について疑問に思っていますが、たとえば「13」が1つの数値として認識されるかどうかはわかりません。

4

3 に答える 3

2

';'までストリッピングするために行ったのとまったく同じことを行うことができます。ただし、代わりにスペースにも''を使用してください。この結果を配列に配置すると、atoiまたは配列全体で必要なものを使用できます。2次元配列に入れたい場合は、文字列を「;」まで分割できます。次に、そのループ内で、各整数を配列の任意の部分に分割します。宿題のように見えるので、コードを書きません。

于 2012-12-27T20:32:47.713 に答える
2

区切り文字として偶数スペースを使用します。たとえば、私たちの場合、このコードはサイズ4x4の2D配列に数値を入れます

#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");
}   
} 
于 2012-12-27T20:56:41.237 に答える
1

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;
}

ここでは、入力文字列は変更されないことに注意してください。

于 2012-12-27T20:37:21.227 に答える