2016-09-13 8 views
-3

Моя текущая проблема заключается в чтении неизвестного числа целых чисел от stdin. Мой подход заключается в использовании gets() для хранения всей строки в виде массива char (char str[50]). Я пытаюсь проанализировать массив символов и преобразовать каждую строку string в целое число и сохранить в массиве int. Я попытался использовать strtol (nums[i]=strtol(A, &endptr, 10), где A - это массив символов. Однако endptr, похоже, ничего не хранит, когда остальная часть A также является числом. Например, если A является «8 hello» endptr = hello, но когда A является " 8 6 4" endptr ничего.Лучший способ преобразования массива строк в массив Int в C

есть ли лучший подход? возможно ли это с atoi? Любая помощь очень ценится! Спасибо!

char A[1000]; 
long nums[1000]; 
printf("Enter integers: "); 
gets(A); 
char *endptr; 
int i=0; 
while(endptr!=A){ 
    nums[i]=strtol(A, &endptr, 10); 
    i++; 
} 
+0

Итерации по массивам и преобразование каждого числа. В чем проблема? Покажите свой код. Это не кодирование. – Olaf

+1

Неясный вопрос без кода. Можете ли вы разместить какой-нибудь код, пожалуйста? –

+0

Если A = "12 35 78", как бы я мог выполнить итерацию по массиву символов? Я мог бы преобразовать его в «1 2 3 5 7 8», но это не то, что мне нужно. –

ответ

0

Это должно извлечь (положительные) целые числа и пропустить правый над чем-либо еще, что не является целым числом:

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

char string[1024]; 
long numbers[512]; // worst case ~ 1/2 number of chars = "1 1 1 1 1 1 ... 1" 

/* ... */ 

printf("Enter integers: "); 
fgets(string, sizeof(string), stdin); 

char *endptr, *ptr = string 
int count = 0; 

while (*ptr != '\0') { 
    if (isdigit(*ptr)) { 
     numbers[count++] = strtol(ptr, &endptr, 10); 
    } else { 
     endptr = ptr + 1; 
    } 

    ptr = endptr; 
}