2012-06-22 4 views
0

이것은 Ansi C에 있습니다. 문자열이 있습니다. 그 문자열의 각 단어의 시작 부분을 가리키는 문자 포인터의 배열을 반환하는 메서드를 생성해야합니다. 나는 MALLOC를 사용할 수 있지만, 대신, 내가 strtok를 :(ANSI C에서 포인터를 사용하여 문자열 토큰 화

char input[80] = "hello world, please tokenize this string" 
를 사용할 수없는 사람이 포럼을 검색하지 나를 불길 전에 입력의 최대 길이는, 또한 80

될 것이라고 말했다 있지 않다

및 방법의 출력이 있어야한다 6 요소,

output[0] points to the "h", 
output[1] points to the "w", 

등 내가 방법을 작성해야하는 방법

.?

또한 최대 110 줄의 파일에서 입력을 처리하는 비슷한 방법이 필요합니다.

+0

이것은 숙제로 들릴까요? – nhahtdh

+0

이 숙제가 있습니까? 당신은 이미 무엇을 시도 했습니까? – peacemaker

+0

예, 숙제입니다. 만기 날짜가 이미 지났습니다. 지금 호기심에서 물어보십시오. – bxio

답변

1

의사 코드 : 문자 단어의 여부의 일부인지

boolean isInWord = false 
while (*ptr != NUL character) { 
    if (!isInWord and isWordCharacter(*ptr)) { 
     isInWord = true 
     save ptr 
    } else if (isInWord and !isWordCharacter(*ptr)) { 
     isInWord = false 
    } 
    increment ptr 
} 

isWordCharacter 검사한다. 귀하의 정의에 따라 알파벳 문자 (part-time을 2 단어로 인식) 또는 - (하나의 단어로 part-time 인식)을 포함 할 수 있습니다.

0

는 숙제가 여기에 당신이해야 할 수도 있습니다 무엇의 일부이기 때문에 :

char* readPtr = input; 
char* wordPtr = input; 
int wordCount = 0; 
while (*readPtr++ != ' '); 
/* Here we have a word from wordPtr to readPtr-1 */ 
output[wordCount++] = /* something... :) */ 

당신은 루프에서이 필요합니다, 그리고 다음 단어로 이동, 입력의 끝을 확인하는 방법을 고려해야합니다.

+0

'! = '''를 검사하는 것은 좋은 생각이 아닙니다. 왜냐하면 문자열은''쉼표,,,, 많이,''일 수 있고',' 단어. – nhahtdh

+0

이것은 사실입니다. 대신 구분 기호 배열을 만들고 그에 대한 readPtr을 확인하는 것이 좋습니다. 이것은 시작하는 방법에 대한 제안이었습니다 :) – peacemaker