2014-11-25 2 views
-4

У меня есть char* отформатирован, как:С разбить строку в массив Int

* SEARCH 1 2 3 ... 

с переменным числом целых чисел, разделенных пробелами. Я хотел бы написать функцию для возврата int[] с целыми числами после * SEARCH.

Как мне написать эту функцию?

+1

У вас возникли вопросы или вы просто хотите, чтобы кто-то написал его для вас? Вот подсказка: вы можете посмотреть на 'strtok()'. –

+0

см. Это: http: //stackoverflow.com/questions/9210528/split-string-with-delimiters-in-c –

+0

@JonathanWood Я понятия не имею, как его написать. Я привык к питону. Это не домашнее задание или что-то еще, было бы неплохо просто получить функцию. –

ответ

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

int *f(const char *s, int *n /* out */){ 
    if(strncmp(s, "* SEARCH", 8)!=0){ 
     fprintf(stderr, "format error!\n"); 
     *n = 0; 
     return NULL; 
    } 
    s += 8; 
    const char *p = s; 
    int v, len, status; 
    int count = 0; 
    while((status=sscanf(p, "%d%n", &v, &len))==1){ 
     ++count; 
     p +=len; 
    } 
    if(status==0){ 
     fprintf(stderr, "format error!\n"); 
     *n = 0; 
     return NULL; 
    } 
    int *ret = malloc(count * sizeof(*ret)); 
    p = s; 
    count = 0; 
    while(EOF!=sscanf(p, "%d%n", &v, &len)){ 
     ret[count++]=v; 
     p +=len; 
    } 
    *n = count; 
    return ret; 
} 

int main (void){ 
    int i, n, *nums = f("* SEARCH 1 2 3", &n); 

    for(i=0; i<n; ++i) 
     printf("%d ", nums[i]); 
    printf("\n"); 
    free(nums); 
    return 0; 
} 
Смежные вопросы