2011-11-20 2 views
0

문단을 문장으로 변환하려면 어떻게해야합니까?단락을 동적 메모리가있는 문장으로 변환

  • paragraph 여러 문장을 포함하는 문자열은 다음과 같습니다

    char **makeSentences(char *paragraph); 
    

    하는 다음과 같이 나는 함수 서명을해야합니다. 문단은 각 문장이 마침표 (.)로 끝나고 전체 단락이 null 종결 자로 끝나도록합니다.

  • 은 동적으로 할당 된 문장의 배열을 반환합니다.

저는 문장 배열에 대한 메모리 할당 방법에 대해 혼란스러워합니다.

+0

호출자는 함수에서 반환 할 문장의 수를 어떻게 알 수 있습니까? – JosephH

+0

죄송합니다. 방금 질문을 업데이트했습니다. – antiopengl

+0

당신의 질문은'malloc'과'realloc'으로 태그되었습니다. 이 시설들을 사용하려고 했습니까? –

답변

0

사전에 단락 수를 제공하는 도우미 메서드를 작성한 다음이 수를 기반으로 char * 포인터의 배열을 malloc하십시오.

int getSentenceCount(char* paragraph) { 
    int sentenceCount = 0, i = 0; 
    for(i=0; i < sizeof(paragraph); i++){ 
     if(paragraph[i] == '.') sentenceCount++; 
    } 

    return sentenceCount; 
} 

당신이 문장을했으면 문자열 유틸리티 기능 (string.h를 참조)를 사용하여 쉽게해야 나머지를 계산 : 그것은 똑바로 작동하지 않을 수 있도록 아래의 코드가 검증되지 않은 있지만 그것은이 같은 것

1

makeSentences 내에서 \0의 마침표와 문자를 포함하여 각 문장에 포함 된 문자 수를 확인하려면 paragraph을 검사해야합니다.

당신은이 같은 메모리를 할당 할 수 있습니다 length_of_sentences 문장을 포함하는 배열 당신이 발견 한 길이입니다

int i; 
char** sentences = (char**)malloc(sizeof(char*) * number_of_sentences); 
for (i = 0; i < number_of_sentences; i++) { 
    sentences[i] = (char*)malloc(sizeof(char) * length_of_sentences[i]); 
} 

.

+0

하지만 어떻게 각 문자를 문장 배열에 복사 할 수 있습니까? – antiopengl

+1

strncpy를 살펴보십시오. – James

0

호출자가 배열 끝까지 도달했는지 확인할 수 있도록 배열의 한 항목을 더 크게 만들고 마지막/추가 항목에 NULL을 사용합니다.

어려운 부분은 확실히 문장의 시작/끝을 결정할 것입니다.

Hello world! 
Are you hungry? 
She said "Hello. I'm Sara!" and smiled. 
I installed version 1.3. 
They laughed at the F.B.I. and ran. 
The function returned the sequence 1, 3, 5, ..., 33. 
7 is a lucky number (and this sentence doesn't start with a capital letter). 

탐지하여 "문장의 끝이"제대로 작동하는지 확인하기 위해 하나의 단락으로 모든 문장을 넣어 : 여기에 몇 가지 예문 (한 줄에 한 문장을)입니다.