2017-04-16 5 views
0

다음과 같은 데이터 문자열이 있습니다 : 3,1,6,IN,88. 나는 첫 번째 3 개주기 얻을 필요가 은 그래서 IN,88되는 마지막 , 마지막 문자열 전에 루프를 중지합니다 (| 1 | | 6 3 88IN) :strtok를 3 개의 토큰으로 제한

char *pch=strtok (data,","); 
while (pch != NULL) 
     { 
      //works well here 
      pch = strtok (NULL, ","); 
     } 

을하는 것입니다 또한 IN,88을 나눠서 쉼표로 그 안에 넣고 싶습니다.

카운터를 3으로 설정하면 분명히 작동하지 않습니다. 데이터를 변경하지 않고이를 수행 할 수있는 간단한 방법이 있습니까?

+1

대신 'for' 루프를 사용해보세요. –

+0

나는 여기서 효율적이어야한다. 그것의 하드웨어. 그래서 당신은 for 루프와 함께 strtok을 사용하는 것을 의미합니까? – Curnelious

+0

마지막 토큰에 다른 구분 기호 세트를 사용하여 쉼표로 구분하지 마십시오. –

답변

0

토큰 화 후에 원래 문자열의 untokenized 부분이 필요합니다. 또한 입력 문자열을 지정된 횟수만큼 토큰 화해야합니다. 당신은 이것을 시도 할 수 있습니다. 당신이 puts(tmp);을 할 경우

char *tmp; // will store the untokenized part of the string 
int count; // how many times the string will be tokenized 
tmp = data; // before starting to tokenize, the whole input is untokenized 
char *pch = strtok (data,","); 
count = 1; 
while (pch != NULL && count <= 3) // you want to tokenize thrice 
{ 
    tmp = tmp + strlen(pch) + 1; // shift the pointer pointing untokenized string 
    pch = strtok(NULL,","); 
    count++; 
} 
tmp = tmp + strlen(pch) + 1; // shift the pointer after last tokenization 

이 후, 당신은 출력으로 문자열의 untokenized 부분을 얻을 것이다.