일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 카카오
- 구조체배열
- 알고리즘
- 카카오 코테
- nestjs typeorm
- python
- 스프링
- C++
- 프로그래머스
- 해시
- AWS
- 코딩테스트
- OpenCV
- nestjs auth
- spring boot
- 시스템호출
- @Autowired
- git
- Nodejs
- Spring
- C언어
- 컴포넌트스캔
- nestJS
- 파이썬
- @Component
- TypeORM
- thymeleaf
- 코테
- 카카오 알고리즘
- 가상면접사례로배우는대규모시스템설계기초
Archives
- Today
- Total
공부 기록장 💻
[C언어] 문자열 처리 함수 <string.h> 본문
<string.h> 헤더 파일에 정의되어 있는 문자열 처리 라이브러리 함수들
size_t strlen(const char *str); - 기능: 문자열의 길이 반환 - 인수: 문자열 주소 - 반환값: 문자열의 길(마지막 NULL값 제외) |
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[10] = "Hi";
printf("%s의 문자열 길이 : %d\n", str1, strlen(str1));
printf("Hello 의 문자열 길이 : %d\n", strlen("Hello"));
return 0;
}
char *strchr(const char *str, int c); - 기능: 문자열에서 문자를 찾는다. - 인수: 찾을 대상 문자열, 찾는 문자 - 반환값: 첫 번째 찾은 문자의 위치 주소, 찾지 못한 경우 NULL char *strstr(const char *str1, const char *str2); - 기능: str1에서 문자열 str1를 찾아 그 포인터를 반환 - 인수: 찾을 대상 문자열, 찾는 문자열 - 반환값: 찾은 첫 번째 문자열 포인터 |
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[] = "Programmers";
char str2[] = "Hi, Programmers!";
char* p = NULL;
int loc;
printf("%s의 주소 : %u\n", str1, str1);
printf("%s의 주소 : %u\n", str2, str2);
p = strstr(str2, str1); // str2에서 str1이 발견된 시작 주소를 저장
loc = (int)(p - str2);
printf("%s에서 %s의 첫번째 문자가 %d번째에서 발견됨\n", str2, str1, loc);
return 0;
}
int strcmp(const char *str1, const char *str2); - 기능: 두 문자열 비교 - 인수: 비교할 첫 번째 문자열, 비교할 두 번째 문자열 - 반환값: str1 < str2 음수, str1 > str2 양수, 같으면 0 (사전적 순서) int strncmp(const char *str1, const char *str2, size_t n); - 기능: 두 문자열을 처음부터 n바이트까지 비교 - 인수: 첫번째 문자열, 두번째 문자열, 바이트수 - 반환값: n바이트까지 str1 < str2 음수, str1 > str2 양수, 같으면 0 (사전적 순서) |
char *strcpy_s(char *dest, rsize_t destsz, const char *src); - 기능: 문자열을 복사 - 인수: 복사 받을 배열 주소, 복사받을 문자열의 최대(제한) 길이, 복사할 문자열 주소 - 반환값: 복사 받을 배열 주소 char *strncpy_s(char *dest, rsize_t destsz, const char *src, size_t n); -기능: 문자열에서 n개의 문자 복사 - 인수: 복사 받을 배열 주소, 복사받을 문자열의 최대(제한) 길이, 복사할 문자열 주소, 바이트 수 - 반환값: 복사 받을 배열 주소 |
char *strtok_s(char *str1, const char *delimeter, char **context); - 기능: 구분자 delimeter을 기준으로 str1 문자열을 토큰(token)으로 분리한다. - 인수: 분리할 대상 문자열, 구분자 문자열, 분리된 문자열 중 두번째 문자열의 시작 주소를 저장할 포인터 변수의 주소 - 반환값: 분리한 토큰의 포인터, 토큰 분리가 끝나면 NULL |
분리하고자 하는 대상 문자열에서 구분자 delimeter 에 저장되어 있는 문자가 나오면,
구분자의 문자를 NULL 값으로 바꾸어 이전 문자열을 하나의 토큰으로 분리한 뒤,
분리된 문자열 중 두번째(다음) 문자열의 주소를 인수로 전달하는 함수이다.
while 반복문을 이용해 문자열의 끝에 도달할 때 까지(구한 token 값이 NULL일 때까지) 토큰을 분리할 수 있다.
#include <stdio.h>
#include <string.h>
int main(void) {
char s[] = "I love you so much.";
char* tok = NULL, * next = NULL;
char seps[] = " .,[]{}\n"; // separator=delimeter
int n = 0;
tok = strtok_s(s, seps, &next);
while (tok) {
printf("%d : %s\n", ++n, tok);
tok = strtok_s(NULL, seps, &next);
}
return 0;
}
구분자 문자열에 해당되는 모든 문자를 기준으로 토큰이 분리가 된다.
char *strcat_s(char *dest, rsize_t destsz, const char *src); - 기능: 구분자 delimeter을 기준으로 str1 문자열을 토큰(token)으로 분리한다. - 인수: 분리할 대상 문자열, 구분자 문자열, 분리된 문자열 중 두번째 문자열의 시작 주소를 저장할 포인터 변수의 주소 - 반환값: 분리한 토큰의 포인터, 토큰 분리가 끝나면 NULL |
첫 번째 문자열(목적지)의 메모리 공간이 충분히 확보되어야 함을 유의하자.
#include <stdio.h>
#include <string.h>
int main(void) {
char dst[30] = "Hi";
char src[] = "Programmers!";
char str[50] = ""; // 직접 입력받을 문자열 변수 선언
printf("문자열 입력: ");
gets(str);
printf("dst = %s\n", dst);
strcat_s(dst, sizeof(dst), ", ");
strcat_s(dst, sizeof(dst), src, 5);
strncat_s(dst, sizeof(dst), str, 10);
printf("dst = %s\n", dst);
return 0;
}
메모리 공간이 충분히 확보된 첫번째 문자열 dst에 문자열을 여러 방법으로 이어 붙이는 프로그램이다.
strncat_s() 함수를 사용한 경우 n의 길이만큼의 문자열이 이어 붙여졌음을 확인할 수 있다.
728x90
반응형
'# Language & Tools > C' 카테고리의 다른 글
[C언어] 구조체를 이용한 소규모 데이터베이스 관리 프로그램 (2) | 2021.02.03 |
---|---|
[C언어] 구조체 - 구조체 변수 선언, 초기화, 구조체 포인터, 구조체 배열, 함수 (0) | 2021.02.02 |
[C언어] 파일 입출력 - FILE 파일 포인터, 파일 관련 함수 (0) | 2021.01.28 |
C언어 Express 15장 파일 입출력 Programming 심화 문제 추가 (2) | 2021.01.26 |
[C언어] 함수(function)의 정의, 선언, 호출 / 함수의 매개변수, 반환값, 함수 원형 (0) | 2021.01.25 |
Comments