【问题标题】:How to get numbers from this type of string in C如何从C中的这种类型的字符串中获取数字
【发布时间】:2012-12-27 20:22:13
【问题描述】:
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"  

现在我不知道如何获取整数中的数字并将它们保存到二维字段(矩阵)。我需要这样的东西:

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

我想知道 atoi(),但我不确定它是否会将例如“13”识别为一个数字..

【问题讨论】:

  • 这看起来像是家庭作业。
  • 程序是如何设置的?你怎么称呼它?提供更多细节。

标签: c string integer strtok atoi


【解决方案1】:

使用偶数空格作为分隔符。例如,在您的情况下,此代码将数字放入大小为 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 或任何您想要的内容。如果要将其放入二维数组中,则可以将字符串拆分为 ';'然后在该循​​环中将每个整数拆分为您想要的数组的任何部分。不会写代码,因为它看起来像家庭作业。

    【讨论】:

      【解决方案3】:

      一种方法是使用 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;
      }
      

      注意,这里输入的字符串保持不变。

      【讨论】:

        猜你喜欢
        • 2021-07-02
        • 2013-05-22
        • 2015-07-02
        • 1970-01-01
        • 2014-01-01
        • 2022-01-18
        • 2016-10-24
        • 1970-01-01
        相关资源
        最近更新 更多