2010-11-29 3 views
0

파일에서 한 행을 읽고 해당 행을 토큰으로 분할 한 후 토큰에 [a-zA-Z] 알파벳 문자 만 포함되어 있는지 확인해야합니다. 이것을 확인하기 위해 C 표준 라이브러리에 어떤 종류의 함수가 있습니까? 나는 이것을 확인하기 위해 regex.h를 사용할 수 있지만 이것이 과장된 것이라고 생각한다.char *가 단어인지 확인하는 C 표준 라이브러리 함수?

물론, 토큰을 반복하고 모든 문자를 검사하는 함수를 작성할 수는 있지만 바퀴를 다시 만들지는 않습니다.

P .: 타사 라이브러리 사용은 옵션이 아닙니다. 물론

+7

C는 최소한이다. "재발견하고 싶지 않다"및 "타사 라이브러리가 옵션이 아닙니다"는 서로 잘 섞이지 않습니다. –

+0

@ J-16 실제 프로젝트에서 필자는 타사 라이브러리를 확실히 사용 하겠지만이 라이브러리는 표준 라이브러리 :-(. – helpermethod

+1

[s] scanf ("% [a-zA -Z])? – Nyan

답변

6

:

#include <ctype.h> 

int isalpha(int ch) // is alphabetic? 
int isalnum(int ch) // is alphanumeric? 
+5

분명히 잘못된 정보로 가득 찬 사이트에 대한 링크는 –

-2

C 표준 라이브러리 숯불 * 관련 기능에 매우 짧습니다. anythings 도움이 있는지 확인하기 위해이 링크를 확인하십시오 : http://www.cplusplus.com/reference/clibrary/cstring/

+0

-1입니다. –

+0

cplusplus.com은 잘못된 정보로 가득 찼습니까? 몇 가지 예를 보여줄 수 있습니까? – Kos

3

코스, isalpha(int ch)isalnum(int ch)에서 언급 한 바와 같이 당신은 이러한 모든 기능을 ctype.h

int isalnum(int c); 
    int isalpha(int c); 
    int iscntrl(int c); 
    int isdigit(int c); 
    int isgraph(int c); 
    int islower(int c); 
    int isprint(int c); 
    int ispunct(int c); 
    int isspace(int c); 
    int isupper(int c); 
    int isxdigit(int c); 
3

에 정의 된, 그러나 그 숯불 * 기능하지 않습니다. 주의해야 할 것은 있지만 isalpha로 자신의 것을 코딩하고 alnum은 매우 쉽습니다. 특수 문자를 다룰 예정이라면 로캘을 확인하십시오 (isalpha는 해당 언어에 따라 다릅니다).

+0

+1 로케일 특정 문제를 언급 할 때 (생각하지 않았습니다.) – helpermethod

+0

+1 예, 두 가지 기능은 ascii 문자에만 유효하며 다른 문자는 오탐을 유발할 수 있습니다. – EvilTeach

+0

@Helper Method :'setlocale()'을 절대로 호출하지 않으면, 프로그램은'isalpha()'의 정의가 표준화되어있는 디폴트 C 로케일에서 실행될 것입니다. – caf

3

Strspn이 작업을 수행합니다.

기본 개념은 문자열을 지정하고 특정 목록의 문자로 구성된 가장 긴 조각의 길이를 반환한다는 것입니다. 해당 목록에 a-z와 A-Z를 추가하십시오. strspn의 값이 strlen과 같으면 갈 수 있습니다.

+0

+1 다른 멋진 게시 된 솔루션보다 훨씬 뛰어난 기능과 ​​유연성을 제공합니다. 그러나 isalpha()를 사용합니다 (그러나이 문제를 계속 지켜보십시오). – helpermethod

+1

이 답변은 고정 된 일관된 동작을 원할 때 가장 좋습니다. 'isalpha'로 자신 만의 루프를 작성하는 것은 로케일 지원이 매우 부족한 경우에 옵션입니다. 올바른 로케일 지원을 얻으려면'mbrtowc'와'iswalpha'를 사용하여 루프를 작성하는 것이 유일한 방법입니다. –

관련 문제