일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 으
- Express
- 미니프로젝트
- 파이썬서버
- Unseen
- 디자드
- 언리얼프로그래머
- 프린세스메이커
- 마인크래프트뮤지컬
- R
- 스마일게이트
- 스터디
- JWT
- Bootstrap4
- 알고풀자
- 정글사관학교
- Jinja2
- node
- 카렌
- Enhanced Input System
- 언리얼뮤지컬
- 언리얼
- 프메
- flask
- EnhancedInput
- 게임개발
- 레베카
- VUE
- 데이터베이스
- Ajax
- Today
- Total
Showing
[C, C++] 문자열을 다루는 함수(strcat,sprintf,strcpy,strncpy, strcmp) 본문
[C, C++] 문자열을 다루는 함수(strcat,sprintf,strcpy,strncpy, strcmp)
RabbitCode 2024. 1. 4. 14:57#include <cstring> 문자열 관련 함수의 선언을 담고 있는 헤더파일
strcpy(...) : 문자열을 복사하는 함수
strcmp(...) : 문자열을 비교하는 함수
strcat(...) : 문자열을 이어붙이는 함수
strpos(...) : 문자열을 찾는 함수
이번 포스팅에서 정리할 C의 문자열 함수는
strcat
sprintf
strcpy
strncpy 이다.
1. strpcy :
destination으로 문자열 복사
char* dest = (char*)malloc(sizeof(char)*20);
char source[] = "my name";
strcpy(dest, source);
printf("%s\n", dest);
char dest[20];
char source[] = "my name";
strcpy(dest, source);
printf("%s\n", dest);
strcpy(m[i]->name, "hello ");
2. strncpy
destination으로 문자열 복사하되, 크기 지정 가능.
(1) strcpy로 문자열을 복사할 때, 목표 char 포인터의 크기가 복사하는 char 포인터의 크기보다 작을 수 있다.
strncpy은 문자열 복사 함수로, 두 번째 문자열의 크기를 원하는 만큼(세번째 인자) 복사할 수 있다.
Null 종료 문자를 만나면 복사를 중단한다.
char dest[6];
char source[] = "Hello, World!";
strncpy(dest, source, sizeof(dest) - 1); // Null 종료 문자 공간 확보
dest[sizeof(dest)-1] = '\0';
printf("%s\n", dest);
3. sprintf
형식화된 문자열을 생성하는 함수이다.
문자열 내에 형식 지정자를 사용하여 변수 값을 문자열로 변환하고 복사 가능하다.
for (int i = 0; i <3; i++) {
char dest[100];
sprintf(dest, "my place");
printf("%s\n", dest);
sprintf(dest, "my place is here %d", i+1);
printf("%s\n", dest);
}
my place
my place is here 1
my place
my place is here 2
my place
my place is here 3
char buffer[50];
int num = 66;
sprintf(buffer, "my answer is %d\n", num); //buffer에 "The answer is num"가 생성
printf("%s\n", buffer); //my answer is 66
4. strcat
문자열을 이어붙이는 함수이다.
첫 번째 문자열 뒤에 두 번째 문자열을 추가합니다.
역시 첫 번째 문자열의 크기에 제한이 없으므로 주의가 필요하다. Null 종료 문자를 만날 때까지 이어붙인다.
char dest[10];
sprintf(dest, "%d world", i);
char normal[20] = "Hello,";
strcat(normal, dest);
printf("%s\n", normal);
Hello,0 world
Hello,1 world
Hello,2 world
Hello,3 world
Hello,4 world
Hello,5 world
Hello,6 world
Hello,7 world
Hello,8 world
Hello,9 world
char str1[10] = "world";
char str2[100] = "Hello,";
strcat(str2, str1);
printf("%s\n", str2);
5. strcmp
두 문자열이 동일한지 확인하는 함수
만약 두 문자열이 다르면 양수나 음수를 반환하고 같으면 0을 반환한다.
예제
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cmath>
#include <ctime>
#define FSEEK() {fseek(stdin,0,SEEK_END);}
#include "Header.h"
struct Marine {
int hp;
int mp;
char name[20];
};
int main()
{
#ifndef FSEEK
#else
Marine* m[10] = { nullptr, };
for (int i = 0; i < 10; i++) {
m[i] = (Marine*)malloc(sizeof(Marine));
}
for (int i = 0; i < 10; i++) {
m[i]->hp = 100 + i;
m[i]->mp = 50 + i;
char name[20];
char num[1];
sprintf(name, "hello %d world", i);
strcpy(m[i]->name, name);
}
for (int i = 0; i < 10; i++) {
printf("%d 번째\n", i+1);
printf("%d\n", m[i]->hp = 100 + i);
printf("%d\n", m[i]->mp = 50 + i);
printf("name: %s\n", m[i]->name);
}
return 0;
#endif
}
1 번째
100
50
name: hello 0 world
2 번째
101
51
name: hello 1 world
3 번째
102
52
name: hello 2 world
4 번째
103
53
name: hello 3 world
5 번째
104
54
name: hello 4 world
6 번째
105
55
name: hello 5 world
7 번째
106
56
name: hello 6 world
8 번째
107
57
name: hello 7 world
9 번째
108
58
name: hello 8 world
10 번째
109
59
name: hello 9 world
'language > C, C++' 카테고리의 다른 글
[C++] 코딩테스트에서 자주 쓰는 함수 예제 모음 (0) | 2024.02.03 |
---|