1

我有一个像“1 10 14 16”这样的字符 * 我想将它拆分为整数数组,如 1,10,14,16 ......我该怎么做?

4

7 回答 7

4

我建议在循环中使用strtolendptr ,显式使用它的 参数,例如:

char* pc = input_string;
char* end = NULL;
while (*pc) {
   long l = strtol (pc, &end, 0);
   if (end == pc) break;
   do_something_useful_with_the_number (l);
   pc = end;
}

如果要累积数组中的所有数字,请替换do_something_useful_with_the_number (l);为增长该数组的代码(可能使用malloc和/或realloc...)

于 2012-06-25T05:10:01.457 回答
1

我会像这样使用 strtok() :

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

int main() {
   char string[] = "1 10 14 16",
        *next = NULL;
   int number[10] = {0},
       noOfNumbers = 0,
       i = 0;

   next = strtok(string, " "); /* first call must have the string and delimiters */

   while ( next != NULL ) {
      number[noOfNumbers++] = atoi(next);
      next = strtok(NULL, " "); /* second call only the delimiters */
   }

   for ( i = 0; i < noOfNumbers; i++ ) {
      printf("number[%d] = %d\n", i, number[i]);
   }

   return 0;
}

如何确保整数数组足够大由您决定。

于 2012-06-25T05:13:00.467 回答
0

用于strtok分隔数字,然后atoi在每个数字上使用以将它们转换为整数。

http://www.elook.org/programming/c/strtok.html

于 2012-06-25T05:02:38.293 回答
0
int output[4];

char *input_string = "1 10 14 16";

sscanf(input_string, "%d %d %d %d", &output[0], &output[1], &output[2], &output[3]);

printf(" OUTPUT : %d %d %d %d\n", output[0], output[1], output[2], output[3]);

上面的代码应该可以工作

问候

于 2012-06-25T05:02:51.127 回答
0

1 你将不得不一次strtok获得一个数字字符串。

2 然后您必须atoi将数字字符串转换为int。

这需要在循环条件strtok返回有效字符串之前完成

于 2012-06-25T05:03:11.440 回答
0
 #include <stdio.h>
        ///i is count *input_string[] times
        ///j is count temp[] times
        int main() {
            int i,j=0,num=0,*ptr,output;
            char temp[9]={'\0'};
            char *input_string[] = {"1 10 14 16 20 31 34 67 23 45 23"};

            for(i=0;*(*(input_string+0)+i)!='\0';)
            {
                switch(*(*(input_string+0)+i))
                {
                   case ' ':i++;break;
                   case '1':case '2':case '3':
                   case '4':case '5':case '6':
                   case '7':case '8':case '9':
                   case '0':
                       j=0;
                       while(*(*(input_string+0)+i) != ' ' || j>9 )
                       {
                            temp[j]=*(*(input_string+0)+i);
                            i++;j++;
                       }
                       j++;
                       temp[j]='\0';
                       output=atoi(temp);
                       ptr=malloc( sizeof(int) );
                       ptr=&output;
                       printf("%d ",*ptr);
                       break;
                }
            }
            return 0;
        }
I made small modifications.I updated the malloc (); function.May I ask whether the          condition?Thank you!
于 2012-06-27T11:04:17.927 回答
-1
            #include <stdio.h>
            ///i is count *input_string[] times
            ///j is count temp[] times
            ///num is count output[] times
            int main() {
                int i,j=0,num=0;
                int output[4];
                char temp[9]={'\0'};
                char *input_string[] = {"1 10 14 16"};

                for(i=0;*(*(input_string+0)+i)!='\0';)
                {
                    switch(*(*(input_string+0)+i))
                    {
                       case ' ':i++;break;
                       case '1':case '2':case '3':
                       case '4':case '5':case '6':
                       case '7':case '8':case '9':
                       case '0':
                           j=0;
                           while(*(*(input_string+0)+i) != ' ' || j>9 )
                           {
                                temp[j]=*(*(input_string+0)+i);
                                i++;j++;
                           }
                           j++;
                           temp[j]='\0';
                           output[num]=atoi(temp);
                           num++;
                           break;
                    }
                }
                for(i=0;i<4;i++)///print number
                    printf("%d ",output[i]);
                return 0;
            }

 ///*(*(input_string+0)+i) you can see is e.g char input_string[][]; 
于 2012-06-25T15:36:10.550 回答