2015-08-12 5 views
-2

Итак, теперь, когда я выяснил, как получить то, что я хочу, я просто надеюсь, что кто-то может сообщить мне более чистый, менее смешной способ добиться того же. Я просто изучаю C. Вот мой подход.Разбор строки в массив целых чисел в C

int main() 
{ 
    // String of positive and negative integer values 
    // Numbers are never more than 2 digits 

    char TEMPS[256] = "1 -22 -8 14 5"; 
    int N = 5; 

    int ints[N]; 
    int i = 0; 
    int mult; 

    // Arbitrary number to identify that num is not yet in use 
    int num = 999; 

    int c = 0; 
    mult = (TEMPS[c] != 45) ? -1 : 1; 
    while(strcmp(&TEMPS[c], "\0") != 0) 
    { 
     if(TEMPS[c] == 32) 
     {    
      ints[i] = mult * num;       
      i++; 
      num = 999; 
      mult = (TEMPS[c + 1] == 45) ? -1 : 1; 
     } 
     else if((TEMPS[c] != 45) && (TEMPS[c] != 32)) 
     { 
      if(num == 999) 
      { 
       num = TEMPS[c] - '0'; 
      } 
      else 
      { 
       num = num * 10 + (TEMPS[c] - '0'); 
      } 
     }  
     c++; 
    } 
    ints[i] = mult * num;  
} 
+1

'strtol()'? 'Sscanf()'? * Все, кроме кода, который вы написали? * – EOF

+2

@SouravGhosh: Нет. 'Strtol()' не нуждается в 'strtok()', так как он может возвращать конец текущего числа в аргументе 'char ** endptr' , – EOF

+0

[имеет близкое сходство с этим.] (Http://stackoverflow.com/questions/7021725/converting-string-to-integer-c) – ameyCU

ответ

2

Я хотел бы использовать strtol - вот хороший сайт для того, как это работает, и примеры

http://www.tutorialspoint.com/c_standard_library/c_function_strtol.htm

долго INT strtol (Const символ * ул, символ ** endptr, внутр база)

Параметры

  • ул - Это является строкой, содержащей представление целого числа.
  • endptr - это ссылка на объект типа char *, значение которого задается функцией следующим символом в str после численного значения.

  • база - это основа, которая должна быть между 2 и 36 включительно, или быть специальное значение 0.

Возвращаемое значение

  • Эта функция возвращает преобразованное целое число как длинное значение int, иначе нулевое значение равно r

Я включил один пример из сайт.

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

int main() 
{ 
    char str[30] = "2030300 This is test"; 
    char *ptr; 
    long ret; 

    ret = strtol(str, &ptr, 10); 
    printf("The number(unsigned long integer) is %ld\n", ret); 
    printf("String part is |%s|", ptr); 

    return(0); 
} 
+0

Лучше использовать 'strtoul()' с "unsigned long integer" и 'strtol()' с 'long ret'. – chux

Смежные вопросы