# C 대표적 문자열 처리 함수 헤더파일
1. string.h
2. ctype.h
char * gets ( char * str );
- 표준 입력(stdin)에서 문자를 읽고 개행문자나 파일 끝에 도달 할 때까지 str에 C 문자열로 저장
- 개행 문자가 발견되면 str에 복사되지 않음
- 널 문자는 str에 복사 된 문자 뒤에 자동으로 추가
* 매개변수
- char * str
읽은 문자열을 C 문자열로 복사할 메모리 블록을 가리키는 포인터
* 반환 값(char *)
성공하면 함수는 인자로 넘긴 포인터를 반환
오류가 발생하면 null 포인터 반환
int puts ( const char * str );
- str이 가리키는 C 문자열을 표준 출력(stdout)에 쓰고 개행문자를 추가
- 함수는 널 문자에 도달 할 때까지 지정된 주소(str)에서 복사를 시작
- 널 문자는 스트림에 복사되지 않음
* 매개변수
- const char * str
출력할 C 문자열
* 반환 값(int)
성공하면 음수가 아닌 값을 반환
오류가 발생하면 EOF를 반환
size_t strlen ( const char * str );
- C 문자열 str의 길이를 반환
- C 문자열의 길이는 종료 널 문자에 의해 결정
- C 문자열은 문자열의 시작과 종료 널 문자 사이의 문자 수(널 문자 자체는 포함하지 않음
* 매개변수
- const char * str
C 문자열
* 반환 값(size_t)
인자로 넘긴 문자열의 길이 반환
char * strcpy ( char * destination, const char * source );
- 널 문자를 포함하여 source가 가리키는 C 문자열을 destination이 가리키는 배열(destination)에 복사
* 매개변수
- char * destination
source 문자열을 복사 할 destination 배열에 대한 포인터
- const char * source
복사 할 C 문자열
* 반환 값(char *)
destination 반환
char * strncpy ( char * destination, const char * source, size_t num );
- soruce의 처음 num개의 문자를 destination에 복사
- num개의 문자가 복사되기 전에 source C 문자열의 끝(널 문자로 표시됨)이 발견되면,
총 num개의 문자가 기록 될 때까지 destination이 0으로 채워짐
- source가 num보다 길면 destination 끝에 널 문자가 암시적으로 추가되지 않음
따라서, 이 경우 destination은 널 문자로 끝나는 C 문자열로 간주되지 않음
- destination과 sourcer가 겹치지 않아야 함
* 매개변수
- destinaton
콘텐츠를 복사 할 destination 배열에 대한 포인터
- source
복사 할 C 문자열
- num
소스에서 복사 할 최대 문자 수
size_t는 부호없는 정수
* 반환 값(char *)
destination 반환
char * strcat ( char * destination, const char * source );
- source 문자열의 복사본을 대상 문자열에 추가
- destination의 널 문자는 source의 첫 번째 문자로 겹쳐 쓰여지고
destination 둘 다의 연결로 형성된 새 문자열 끝에 널 문자가 포함
- destination과 source가 겹치지 않아야 함
* 매개변수
- destinaton
C 문자열을 포함해야하며 연결된 결과 문자열을 포함할만큼
충분히 큰 대상 배열에 대한 포인터
- source
추가 할 C 문자열, destination과 겹치지 않아야 함
* 반환 값(char *)
destination 반환
char * strncat ( char * destination, const char * source, size_t num );
- source의 처음 num개의 문자를 대상에 추가하고 널 문자를 추가
- source의 C 문자열 길이가 num 보다 작으면 널 문자까지의 내용만 복사
* 매개변수
- destinaton
C 문자열을 포함해야하며 연결된 결과 문자열을 포함할만큼
충분히 큰 대상 배열에 대한 포인터
- source
추가 할 C 문자열, destination과 겹치지 않아야 함
- num
추가 할 최대 문자 수
size_t는 부호없는 정수
* 반환 값(char *)
destination 반환
int strcmp ( const char * str1, const char * str2 );
- C 문자열 str1을 C 문자열 str2와 비교
- 각 문자열의 첫 번째 문자를 비교하기 시작.
서로 같으면 문자가 다를 때까지 또는 널 문자에 도달 할 때까지 다음 쌍으로 계속됨
* 매개변수
- str1
비교할 C 문자열
- str2
비교할 C 문자열
* 반환 값(int)
문자열 간의 관계를 나타내는 정수 값을 반환
< 0 : 일치하지 않는 첫 번째 문자는 ptr2보다 ptr1에서 더 낮은 값(사전 순서상 앞)
0 : 두 문자열의 내용이 동일
> 0 : 일치하지 않는 첫 번째 문자는 ptr2보다 pt1에서 더 큰 값(사전 순서상 뒤)
int strncmp ( const char * str1, const char * str2, size_t num );
- C 문자열 str1의 최대 num개의 문자를 C 문자열 str2의 문자와 비교
- 각 문자열의 첫 번째 문자를 비교하기 시작.
서로 같으면 문자가 다를 때까지, 널 문자에 도달 할 때까지 (둘 중 먼저 발생하는 경우) 또는
두 문자열에서 num 문자가 일치 할 때까지 다음 쌍으로 계속됨
* 매개변수
- str1
비교할 C 문자열
- str2
비교할 C 문자열
- num
비교할 최대 문자 수
size_t는 부호없는 정수
* 반환 값(int)
문자열 간의 관계를 나타내는 정수 값을 반환
< 0 : 일치하지 않는 첫 번째 문자는 str2보다 str1에서 더 낮은 값(사전 순서상 앞)
0 : 두 문자열의 내용이 동일
> 0 : 일치하지 않는 첫 번째 문자는 str2보다 str1에서 더 큰 값(사전 순서상 뒤)
const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );
- C 문자열 str에서 첫 번째 문자에 대한 포인터를 리턴
- 널 문자는 C 문자열의 일부로 간주. 따라서 문자열 끝에 대한 포인터를 검색하기 위해 찾을 수도 있음
* 매개변수
- str
C 문자열
- character
찾을 문자, int형으로 전달되지만 비교를 위해 내부적으로 char로 다시 변환
* 반환 값(const char * 또는 char *)
- str에서 첫 번째 문자에 대한 포인터
- 문자가 없으면 함수는 널 포인터를 리턴
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );
- str1에서 str2의 첫 번째 발생에 대한 포인터를 반환하거나,
str2가 str1의 일부가 아닌 경우 null 포인터를 반환
* 매개변수
- str1
스캔 할 C 문자열
- str2
일치시킬 문자 시퀀스를 포함하는 C 문자열
* 반환 값(const char * 또는 char *)
str2에 지정된 전체 문자 시퀀스의 str1에서 처음 나타나는 포인터 또는
시퀀스가 str1에 없는 경우 널 포인터
int toupper ( int c );
- c가 소문자이고 해당하는 대문자가 있는 경우 c를 해당하는 대문자로 변환
그러한 변환이 가능하지 않으면 반환된 값은 변경되지 않음
* 매개변수
- c
변환 할 문자
int 또는 EOF로 cast 됨
* 반환 값(int)
- 해당 값이 있는 경우 c에 해당하는 대문자, 그렇지 않으면 c(변경되지 않음)
- 값은 암시적으로 char로 캐스팅 될 수 있는 int 값으로 반환
int tolower ( int c );
- c가 대문자이고 해당하는 소문자가 있는 경우 c를 해당하는 소문자로 변환
그러한 변환이 가능하지 않으면 반환 된 값은 변경되지 않음
* 매개변수
- c
변환 할 문자
int 또는 EOF로 cast 됨
* 반환 값(int)
- 해당 값이 있는 경우 c에 해당하는 대문자, 그렇지 않으면 c(변경되지 않음)
- 값은 암시적으로 char로 캐스팅 될 수 있는 int 값으로 반환
int sscanf ( const char * s, const char * format, ...);
- s에서 데이터를 읽고 매개 변수 형식에 따라 scanf가 사용 된 것처럼
추가 인수가 제공하는 위치에 저장하지만 표준 입력(stdin) 대신 s에서 읽음
- 추가 인수는 형식 문자열 내에서 해당 형식 지정자에 의해
지정된 형식의 이미 할당 된 개체를 가리켜야 함
* 매개변수
- s
데이터를 검색하기 위해 source로 처리하는 C 문자열
- format
scanf의 형식과 동일한 사양을 따르는 형식 문자열을 포함하는 C 문자열
- ... (추가 인수)
형식 문자열에 따라 추출 된 문자의 해석이 적절한 유형으로 저장되는
할당된 저장소에 대한 포인터를 각각 포함하는 일련의 추가 인수를 필요로 함
최소한 형식 지정자가 저장 한 값의 수만큼 이러한 인수가 있어야 함
여분의 추가 인수는 무시됨
* 반환 값(int)
성공하면 함수는 성공적으로 채워진 인수 목록의 항목 수를 반환
이 개수는 예상 항목 수와 일치하거나 일치 실패의 경우 더 적을 수 있음(0도 포함)
데이터를 성공적으로 해석하기 전에 입력이 실패하면 EOF를 반환
int sprintf ( char * str, const char * format, ... );
- printf에서 format이 사용 된 경우 출력되는 동일한 텍스트로 문자열을 작성하지만
출력되는 대신 내용은 str이 가리키는 버퍼에 C 문자열로 저장
- 버퍼의 크기는 전체 결과 문자열을 포함 할 수 있을만큼 충분히 커야함
- 널 문자는 컨텐츠 뒤에 자동으로 추가
- 형식 매개 변수 뒤에 형식에 필요한 만큼의 추가 인수가 필요
* 매개변수
- str
C 문자열이 저장되는 버퍼에 대한 포인터
버퍼는 결과 문자열을 포함 할 수 있을만큼 커야함
- format
printf의 형식과 동일한 사양을 따르는 형식 문자열을 포함하는 C 문자열
- ... (추가 인수)
형식 문자열에 따라 함수는 형식 문자열에서 형식 지정자를 대체하는 데
사용할 값을 포함하는 추가 인수 시퀀스를 필요로 함
최소한 형식 지정자에 지정된 값의 수만큼 이러한 인수가 있어야 함
여분의 추가 인수는 무시됨
* 반환 값(int)
성공하면 작성된 총 문자 수를 반환
이 수에는 문자열 끝에 자동으로 추가되는 추가 널 문자가 포함되지 않음
실패하면 음수를 반환
char * strtok ( char * str, const char * delimiters );
- str을 delimiters의 일부인 문자로 구분된 연속 문자 시퀀스인 토큰으로 분할
- 첫 번째 호출에서 str에 대한 인수로 C 문자열이 오면,
str의 첫 번째 문자는 토큰 스캔을 위한 시작 위치로 사용
- 후속 호출에서 널 포인터가 오면,
마지막 토큰 끝 바로 뒤의 위치를 스캔을 위한 새 시작 위치로 사용
- 토큰의 시작과 끝을 결정하기 위해 먼저 시작 위치에서
delimiters에 포함되지 않은 첫 번째 문자(토큰의 시작이 됨)를 검색
- 그런 다음 토큰의 끝이 되는 delimiters에 포함 된 첫 번째 문자를 토큰의 시작 부분부터 스캔
- 널 문자가 발견되면 스캔도 중지
- 토큰의 끝은 자동으로 널 문자로 대체되고 토큰의 시작은 함수에 의해 리턴됨
- str의 널 문자가 strtok 호출에서 발견되면
이 함수에 대한 모든 후속 호출(첫 번째 인수로 널 포인터를 사용)은 널 포인터를 리턴
- 마지막 토큰이 발견된 지점은 다음 호출에서 사용할 함수에 의해 내부적으로 유지
* 매개변수
- str
자를 C 문자열
이 문자열은 더 작은 문자열(토큰)로 나뉘어 수정됨
또는 널 포인터가 지정 될 수 있으며,
이 경우에는 함수는 이전에 성공한 함수 호출이 종료 된 위치를 계속 검색
- delimiters
구분할 문자가 포함 된 C 문자열
함수 호출시 매번 다를 수 있음
* 반환 값(char *)
- 토큰이 발견되면 토큰 시작에 대한 포인터
- 그렇지 않으면 널 포인터
- 검색중인 문자열에서 문자열의 끝에 도달하면(즉, 널 문자) 항상 널 포인터를 반환
'Programming' 카테고리의 다른 글
문제해결 및 실습 : C++(3학년 1학 (0) | 2020.08.22 |
---|---|
컴파일과 링크 (0) | 2020.08.22 |