문장의 첫 번째 부분과 나머지 부분을 세 개의 변수로 추출하는 효율적인 함수가 필요합니다.C에서 문장에서 단어를 효율적으로 추출하는 방법은 무엇입니까?
답변
쉬운 방법 : 사용 strtok() 또는 strtok_r 문자열에서 제거됩니다 처음 두 토큰을 얻을 수 있습니다, 그래서 문자열 자체는 당신이 찾고 있던 세 번째 토큰을 될 것입니다.
하드 방법 : 스스로를 구문 분석 :(
strtok를이 C 문자열 라이브러리에, 그것은 그대로 유지해야하는 경우, 원래의 문자열이 너무 조심 돌연변이 먼저 문자열을 복사합니다
가능. 예 :
//#include <string.h>
char input[] ="first second third forth";
char delimiter[] = " ";
char *firstWord, *secondWord, *remainder, *context;
int inputLength = strlen(input);
char *inputCopy = (char*) calloc(inputLength + 1, sizeof(char));
strncpy(inputCopy, input, inputLength);
firstWord = strtok_r (inputCopy, delimiter, &context);
secondWord = strtok_r (NULL, delimiter, &context);
remainder = context;
printf("%s\n", firstWord);
printf("%s\n", secondWord);
printf("%s\n", remainder);
getchar();
free(inputCopy);
이 잘 작동하고 unmutated 원래의 문자열로 스레드를해야
또 다른 문제는 strtok()가 내부 정적 변수를 사용하므로 스레드로부터 안전하지 않다는 것입니다. 문제가있는 경우 strtok_r()을 사용하십시오. –
strtok_r –
을 사용하는 매우 사실이며 변경된 예제입니다. 나머지 문장이 아니라 미리 알림의 첫 번째 토큰을 제공합니다. –
@ BartłomiejSemańczyk 실제로 링크를 꺼내면 여전히 'strtok'이라고 표시되기 때문에 여전히 답변입니다. – MicroVirus
@ BartłomiejSemańczyk 나는 09 년에 이것을 대답했다. 링크는 여전히 작동한다! –
을 당신이를 단락을 정의해야합니다. ers 먼저. strtok
에는 몇 가지 문제가 있습니다 (문제를 해결할 수있는 인수를 수정 함). 나는 문자열을 읽고 sscanf
부터 본격적인 파서에 이르는 사용자 정의 파서를 실행하는 것을 선호합니다. 좀 더 자세하게 게시하십시오.
+1''sscanf()'는 단어가 공백이 아닌 것을 의미하므로 변환 지정자를 쉽게 만들고 strtok() 및 친구들의 모든 문제를 깔끔하게 피해야하므로 잘 작동합니다. –
- 1. 문장에서 단어를 세는 방법?
- 2. 유닉스에서 여러 줄로 단어를 추출하는 방법은 무엇입니까?
- 3. PHP에서 regex를 사용하여 단어를 추출하는 방법은 무엇입니까?
- 4. C에서 문자열의 중복 단어를 확인하는 방법은 무엇입니까?
- 5. 다른 언어에서 단어를 추출하는 정규식
- 6. Perl을 사용하여 텍스트에서 여러 단어를 효율적으로 얻는 방법은 무엇입니까?
- 7. C에서 문자열에서 5 자리 숫자를 추출하는 가장 빠른 방법은 무엇입니까?
- 8. 시트를 추출하는 테이블 디자인을 추출하는 방법은 무엇입니까?
- 9. C에서 Trie 구조에 단어를 추가
- 10. 콜론으로 시작하는 모든 단어를 추출하는 정규 표현식
- 11. 도메인 이름 문자열에서 단어를 추출하는 방법
- 12. 필드에서 첫 단어를 추출하는 MySQL 쿼리
- 13. PHP에서 문자열에서 단어를 추출하는 중 문제가 발생했습니다.
- 14. 자바 스크립트 문장에서 단어를 뒤섞기 (코드 호러 - 개선하는 방법)
- 15. RegExp : 문장에서 불필요한 단어를 제거하고 싶습니다. 내가 어떻게 해?
- 16. 전체 단어를 자르는 방법은 무엇입니까?
- 17. div에 단어를 포함하는 방법은 무엇입니까?
- 18. PDF에서 데이터를 추출하는 방법은 무엇입니까?
- 19. 문자열의 일부를 추출하는 방법은 무엇입니까?
- 20. 레일에서 텍스트를 추출하는 방법은 무엇입니까?
- 21. 이메일에서 사진을 추출하는 방법은 무엇입니까?
- 22. istringstream을 효율적으로 복사하는 방법은 무엇입니까?
- 23. 문장에서 각 단어에 대한 그룹을 만드는 방법은 무엇입니까?
- 24. C에서 서버 이름 만 추출하는 방법 #
- 25. c에서 비밀번호를 마스크하는 방법은 무엇입니까? C에서
- 26. MYSQL에서 정지 단어를 재설정하는 방법은 무엇입니까?
- 27. 문자열에서 대문자로 단어를 찾고 바꾸는 방법은 무엇입니까?
- 28. Java에서 영어 단어를 결합하는 방법은 무엇입니까?
- 29. 사전에서 단어를 자동으로 분류하는 방법은 무엇입니까?
- 30. PHP에서 일반적인 접두어로 단어를 일치시키는 방법은 무엇입니까?
티 스 중복 - http://stackoverflow.com/questions/1483206/how-to-tokenize-string-to-array-of-int-in-c/ - 정확하지는 않음 – ChrisF
"on-disk" 한 단어 또는 두 단어? – sambowry
이것은 단지 하나의 문자입니다 –