📌버퍼를 알아보자.. 버퍼링..?
버퍼링: 버퍼를 활용하는 방식, 버퍼를 채우는 동작
버퍼(buffer)라는 임시 메모리 공간

버퍼를 사용하지 않는 경우, 키 입력 시마다 프로그램에 바로 전달이 된답니다.
이와 반대로, 버퍼를 사용하는 경우 키 입력을 "버퍼에 전달 및 저장"하고,
개행문자가 오거나, 버퍼가 가득 찬 경우 "버퍼를 프로그램에 전달"해요.
📌글자는 내가 담당한다..문자열 함수
문자열 함수는 <stdio.h> 헤더 파일과 <string.h> 헤더 파일이 담당해요.
<stdio.h> 헤더 파일
✅ gets_s, puts
gets_s는 "표준 입력 스트림의 버퍼에서 문자열을 읽는 함수" 이고,
puts는 "표준 출력에 문자열을 쓰는 함수" 에요.
쉽게 말해, printf나 scanf처럼 입력과 출력을 받는 함수이죠!
char *gets_s(char* _Buffer, rsize_t _Size);
// 성공 시 입력된 문자열을 반환, 실패하면 NULL을 반환
int puts(char const *_Buffer);
// 성공 시 음수가 아닌 값을 반환, 실패하면 -1을 반환.
<string.h> 헤더파일
✅ strlen
strlen 함수는 이름에서 알 수 있듯,
문자열의 길이를 리턴하는 함수에요.
(string length)
strlen(문자열 포인터);
strlen(문자 배열);
✅ strcpy
strcpy는 문자열을 다른 배열이나,
포인터로 복사하는 함수에요.
(string copy)
strcpy(대상 문자열, 원본 문자열)
대상 문자열의 크기 주의하기!
문자열 배열의 마지막 요소는 NULL이라는 점을 주의하며~
✅ strcat
다음은 strcat 함수에요.
strcat은 문자열을 서로 붙이는 데에 사용해요.
(string concatenate)
strcat(대상문자열, 붙일문자열);
✅ strcmp
마지막은 strcmp 함수에요.
strcmp는 두 문자열이 같은지 비교하는 함수로,
(string compare)
strcmp(문자열1, 문자열2);
문자열 1과 문자열 2을 비교해, 아래와 같은 결괏값을 반환해요.
-1 : ASCII 코드 기준으로, 문자열2가 더 클 때
0 : ASCII 코드 기준으로, 두 문자열이 같을 때
1 : ASCII 코드 기준으로, 문자열1이 클 때
⭐ 정리하기 ⭐
<stdio.h> 헤더 파일 문자열 함수
✔ gets_s
- 표준 입력 스트림의 버퍼에서 문자열을 읽는 함수
✔ puts
- 표준 출력에 문자열을 쓰는 함수
<string.h> 헤더 파일 문자열 함수
✔ strcpy 함수
- 문자열을 다른 배열이나, 포인터로 복사하는 함수
✔ strlen 함수
- 문자열의 길이를 리턴하는 함수
✔ strcat 함수
- 문자열을 서로 붙일 때 사용
✔ strcmp 함수
- 두 문자열이 같은 지 비교하는 함수
✅ 오늘의 문제 : 문자열 길이 비교 후 출력하기
✅ 두 개의 문자열을 입력 받은 후, 두 문자열 중 긴 문자열의 길이를 출력하세요.
✅ 조건
두 문자열의 길이가 같으면, 두 문자열을 하나의 문자열로 합쳐서 출력하세요.
공백도 문자열의 길이에 포함해주세요.
❗Hint : 띄어쓰기도 입력받기 위해서는 scanf("%[^\n]s", 문자열); 을 하면 된다.
❗Hint : 연속적으로 scanf를 사용할 때는 항상 버퍼를 비워주자!
일단 든 생각!
strcmp 함수를 사용해
두 문자열을 비교하고
strlen 함수를 사용해
문자열의 길이를 출력해야겠다!
그렇게 완성 된 최종 코드!!!
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void PrintStrCmp(char s1[], char s2[])
{
char rest = strcmp(s1, s2);
//printf("비교대상 : %s, %s\n", s1, s2);
switch (rest)
{
case 0://s1=s2
printf("%d\n", strlen(s1));
break;
case 1://s1>s2
printf("%d\n", strlen(s1));
break;
case -1://s1<s2
printf("%d\n", strlen(s2));
break;
}
//길이 출력
//printf("%d\n", strlen(s1));
}
int main()
{
//입력
char s1[100];
char s2[100];
//printf("문자열을 입력하세요. : ");
gets_s(s1, sizeof(s1));
gets_s(s2, sizeof(s2));
//scanf("%[^\n]s", s1);
//scanf("%[^\n]s", s2);
//printf("입력한 문자열 : ");
//puts(buffer);
PrintStrCmp(s1, s2);
return 0;
}
//strlen:길이, strcmp:비교
머선 129
오늘 넘 순조롭게 진행됐는걸..???!!!
실력이 늘었낭?
(초롱초롱)
중간에 결과가 이상하게 나왔는데
char rest = strcmp(s1, s2);
여기 부분을 처음에 char가 아닌
int로 작성해서 그런거였다!
의문점은
scanf("%[^\n]s", 문자열); 을
안쓰고도
띄어쓰기가 입력된다는 점..??
안되면 문제지만 되면 괜찮겄지~?

결과도 아주 잘 나온다 ㅎㅎ
strlen:길이, strcmp:비교
함수를 사용하여
예시 응용으로 완성~!
'STUDY > C' 카테고리의 다른 글
[모각코 C언어 메이트 심화편] 헤더파일 | (0) | 2022.02.24 |
---|---|
[모각코 C언어 메이트 심화편] 동적 메모리 할당 | 응용문제 : 소수 갯수 출력하기 (1) | 2022.02.24 |
[모각코 C언어 메이트 심화편] 동적 메모리 할당 | 점수의 평균 구하기 (0) | 2022.02.24 |
[모각코 C언어 메이트 심화편] 함수 포인터 | 사칙연산 계산기 만들기 (1) | 2022.02.24 |
[모각코 C언어 메이트 심화편] 도전 문제 | 2차원 배열과 이중포인터 (0) | 2022.02.24 |