2013-02-19 4 views
0

SO,char ** to char *

나는 char **을 가지고있다. 이것은 본질적으로 그 문장의 모든 단어를 가리키는 문장이다. 즉

'h''i''\0''w''o''r''l''d''\0''y''a''y''!''\0' 

나는 단어 금액과 문자 수를 변화의 문장을 수용 할 수있는 기능이 경우 마지막 문자의 *을 (야호!)의 압축을 찾고 있어요. 어떤 아이디어? 지금까지 필자는 비슷한 일을하는 몇 가지 라이브러리 함수를 발견했으나 정확하게 수행하지는 않습니다.

+3

'의 X [나 strlen (x)는 -1]'? –

+2

@MarcB가 작동하지 않는다면 길이가 2-1이고 "world"를 반환하지만 첫 번째 단어 인 –

+0

에 의존하는 "hi"의 길이가됩니다. 그러면 표준 C 문자열을 사용할 수 없습니다 기능을 수행하고 자신의 롤백해야합니다. 정확히 어떻게 표준 C 문자열 끝 구분 기호가 실제로 문자열의 일부인지,이 문자열의 길이를 어떻게 추적 할 계획입니까? –

답변

3

char **에 값을 할당 할 때 마지막 단어를 어떻게 추적합니까? 문제의 해결책은 이것에 달려 있습니다. 터미널 값을 사용할 수 있습니다 (예 : 마지막 단어 다음에 NULL 값을 입력 한 다음 strlen과 같은 터미널 값을 검색하거나 길이를 size_t 변수에 저장할 수 있습니다. 지금까지 작성한 코드에 관한 추가 정보가 없으면이 중 어떤 것이 적용되는지 확인할 수 없습니다.

+0

내가 생각한 것. 내가 마지막에 특정 값을 가지고 있지 않거나 strlen을 추적하지 않는다면 그것을 할 방법이 없을 것입니까? 내 코드를 수정하고 len –

+0

+1을 저장해야합니다. NULL을 포함하는 마지막 항목 하나를 추가하여 char **을 0으로 종결하는 것이 좋습니다. – alk

0

이에 대한 적절한 데이터 구조를 사용하십시오. 예를 들면 :

다음
struct sentence { 
    size_t word_count; 
    char** words; 
}; 

당신은 항상 O (1) 시간에 마지막 단어를 얻을 수 있습니다 :

struct sentence blah; 
// ... 
char* last_word = blah.words[blah.word_count - 1];