C语言 如何将包含数字的字符串转换为int数组?[已关闭]

e7arh2l6  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(158)

8小时前关门了。
截至8小时前,社区正在审查是否重新讨论此问题。
Improve this question
我有一个字符串,看起来像这样:

849 763 676 848 864 111 602 240 615 643
323 242 538 89 398 570 278 778 818 350
629 445 287 197 774 876 998 581 14 736

所以我需要把它转换成一个int的数组,如下所示:

arr[0] = 849;
arr[1] = 763;
...

有没有简单的方法可以做到这一点?
我已经找到了将每个char转换为数组的方法,但似乎对我不起作用。

jjhzyzn0

jjhzyzn01#

可以在循环中调用函数strtol

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

#define MAX_NUMBERS 100

int main( void )
{
    char input_string[] =
        "849 763 676 848 864 111 602 240 615 643\n"
        "323 242 538 89 398 570 278 778 818 350\n"
        "629 445 287 197 774 876 998 581 14 736\n";

    char *p = input_string;
    int arr[MAX_NUMBERS];
    int valid_numbers;

    //read one number per loop iteration
    for ( valid_numbers = 0; valid_numbers < MAX_NUMBERS; valid_numbers++ )
    {
        char *q;

        //convert next number
        arr[valid_numbers] = strtol( p, &q, 10 );
        if ( q == p )
        {
            //no more numbers were found, so break out of loop
            break;
        }

        //advance pointer past the matched characters
        p = q;
    }

    //print result
    printf( "Found %d numbers:\n", valid_numbers );
    for ( int i = 0; i < valid_numbers; i++ )
    {
        printf( "arr[%d]: %d\n", i, arr[i] );
    }
}

此程序具有以下输出:

Found 30 numbers:
arr[0]: 849
arr[1]: 763
arr[2]: 676
arr[3]: 848
arr[4]: 864
arr[5]: 111
arr[6]: 602
arr[7]: 240
arr[8]: 615
arr[9]: 643
arr[10]: 323
arr[11]: 242
arr[12]: 538
arr[13]: 89
arr[14]: 398
arr[15]: 570
arr[16]: 278
arr[17]: 778
arr[18]: 818
arr[19]: 350
arr[20]: 629
arr[21]: 445
arr[22]: 287
arr[23]: 197
arr[24]: 774
arr[25]: 876
arr[26]: 998
arr[27]: 581
arr[28]: 14
arr[29]: 736

也可以使用sscanf来解决该问题:

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

#define MAX_NUMBERS 100

int main( void )
{
    char input_string[] =
        "849 763 676 848 864 111 602 240 615 643\n"
        "323 242 538 89 398 570 278 778 818 350\n"
        "629 445 287 197 774 876 998 581 14 736\n";

    char *p = input_string;
    int arr[MAX_NUMBERS];
    int valid_numbers;

    //read one number per loop iteration
    for ( valid_numbers = 0; valid_numbers < MAX_NUMBERS; valid_numbers++ )
    {
        int chars_matched;

        //convert next number
        if ( sscanf( p, "%d%n", &arr[valid_numbers], &chars_matched ) != 1 )
        {
            //no more numbers were found, so break out of loop
            break;
        }

        //advance pointer past the matched characters
        p += chars_matched;
    }

    //print result
    printf( "Found %d numbers:\n", valid_numbers );
    for ( int i = 0; i < valid_numbers; i++ )
    {
        printf( "arr[%d]: %d\n", i, arr[i] );
    }
}

第二程序具有与第一程序相同的输出。

相关问题