2014-10-24 2 views
-3

다른 버전으로 작업하려고했지만 모두 불행하게 작동하지 않았습니다. 그것이 내가 여기에 게시하는 이유입니다. 두 개의 문자열 배열을 반환해야합니다. 첫 번째 부분은 처음부터 쉼표가 포함되지 않은 부분 문자열입니다. 두 번째는 쉼표 뒤의 s 부분 문자열입니다. 문자열에는 하나의 쉼표 만 포함됩니다. 또한 char * strchr (const char * s, int c) 사용해야합니다. 글쎄, 그건 나에게 도움이되지 못했다. 제발, 이것으로 mw 도움이, 많은 시간을 보냈습니다 ...... 감사합니다문자열과 하위 문자열

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

    char **split_on_comma(const char * s){ 




    //this piece of code does not work 
    /*int i; 
    char array[80]; 

    for (i=0; i<strlen(s)-1; i++){ 
     if(substr=(s[i],',')==NULL){ 
     array[i]=s[i]; 
     } else 
    }*/ 

    return 0; 
    } 
+0

무슨 일이 일어나고 있고 무슨 일이 일어나고 있는지 설명해주십시오. – Arkadiy

+0

힌트'strchr(), * p = '\ 0'; strdup()'. – chux

+1

같은 문제에 종사하는 사람들. http://stackoverflow.com/questions/26551355/splitting-a-string-at-a-delimiter-and-storing-substrings-in-char-array-in-c – BLUEPIXY

답변

2

이것은 매우 사소한 것입니다 : 그냥 문자열의 두 반쪽을 복사하십시오. NULL 복귀 malloc() 대해

char **split_on_comma(const char *str) 
{ 
    const char *p = strchr(str, ','); 
    if (p == NULL) 
     return NULL; 

    char **subs = malloc(2 * sizeof subs[0]); 
    ptrdiff_t len1 = p - str; 
    ptrdiff_t len2 = str + strlen(str) - (p + 1); 

    // copy and 0-terminate first half 
    subs[0] = malloc(len1 + 1); 
    memcpy(subs[0], str, len1); 
    subs[0][len1] = 0; 

    // copy and 0-terminate second half 
    subs[1] = malloc(len2 + 1); 
    memcpy(subs[1], p + 1, len2); 
    subs[1][len2] = 0; 

    return subs; 
} 

점검이 명확성을 위해 생략하지만 생산 코드에 포함되어야한다.

+0

무엇이 ptrdiff_t ????? @ The Paramagnetic Croiss – Manuel

+2

@Manuel Google은 무엇입니까? (그리고 그 외의 물음표는 무엇입니까? 나는 귀가 먹지 않습니다!) –

+0

감사합니다 ...... – Manuel

관련 문제