*표준 입력 장치 : 키보드
*표준 출력 장치 : 모니터
*표준 입출력 함수 : stdio.h
*버퍼 : 키보드로부터 입력되는 데이터들을 모아서 한 번에 CPU로 전달을 해주는 임시 저장소
*에코 : 입력한 내용을 화면에 보여주는 것
● 문자 단위 처리
<문자 입출력 함수> 3~4는 #include <conio.h>
- scanf("%c", &ch); printf("%c", ch); 하나의 문자를 읽고 저장. 버퍼O, 에코O, 공백을 기준으로 (문자)
- ch = getchar(); putchar(ch); 하나의 문자를 읽고 반환. 버퍼O, 에코O, 엔터를 기준으로 (줄)
- ch = _getch(); _putchar(ch); 하나의 문자를 읽고 반환. 버퍼X, 에코X, 공백을 기준으로 (문자)
- ch = fgetc(stdin); fputc(ch, stdout); 하나의 문자를 읽고 ????. 버퍼O, 에코O, 엔터를 기준으로 (줄)
- ch = _getche(); 아무거나
getchar() 사용 예 3가지 | ||
//1번 #include <stdio.h> int main(void) { char ch; while(1){ ch = getchar(); if(ch == 'a') break; putchar(ch); } } |
//2번 #include int main(void) { char ch; ch = getchar(); while(ch != 'a') { putchar(ch); ch = getchar(); } } |
//3번 #include int main(void) { char ch; while( ( ch = getchar() ) != 'a' ) { putchar(ch); } } |
<문자 검사 라이브러리 함수> #include <ctype.h>
- isalpha(c) : c가 영문자인가?
- isupper(c) : c가 대문자인가?
- islower(c) : c가 소문자인가?
- isdigit(c) : c가 문자형 숫자인가?
- isspace(c) : c가 공백인가?
- isalnum(c) : c가 영문자 또는 문자형 숫자인가? (특수문자를 거르기 위한 함수)
<문자 변환 라이브러리 함수> #include <ctype.h>
- toupper(c) : c를 대문자로 변환
- tolower(c) : c를 소문자로 변환
<Stream>
● 문자열 단위 처리
<문자열 입력 함수>
- scanf("%s", str); //white character(공백, 탭, 엔터)가 나올 때까지 읽은 후 str에 저장
- gets_s(str, size); // 엔터가 나올 때까지 읽은 후 저장. 단, \0을 포함하여 size보다 클 땐 에러
- fgets(str, size, stdin); //엔터가 나올 때까지 읽은 후 저장. 단, \0을 포함하여 size보다 클 땐 알아서 잘라줌.
gets | fgets | |
코드 | char s[5]; gets_s(s, sizeof(s)); |
char s[5]; fgets(s, sizeof(s), stdin); |
abc 입력 | s = abc\0 | s = abc\n\0 |
abcdef 입력 | s = abcde *문자열이 아니므로 에러 | s = abcd\0 |
<문자열 출력 함수>
- printf("%s", str); // '\0' 이 나올 때까지 출력, 자동 줄바꿈X
- puts(str); // '\0' 이 나올 때까지 출력, 자동 줄바꿈O
- fputs(str, stdout); // '\0' 이 나올 때까지 출력, 자동 줄바꿈X
<문자열 처리 함수> #include <string.h>
- strlen(str); //str의 길이 반환
#include <stdio.h> #include <string.h> int main(void) { char str[6] = "Hello"; printf("%d", strlen(str)); //5출력 }
- char* strcpy(dest, src); // dest에 src 복사 후 copied 반환 ('\0'까지 모두 복사)
- char* strncpy(dest, src, n); //dest에 src의 n개 문자 복사 ('\0'은 제외) src의 문자가 n보다 적으면 부족한 만큼 0 복사
#include <stdio.h> #include <string.h> int main(void) { char str[6] = "Hello"; char dest1[10]; char dest2[10]; printf("strcpy 결과: %s\n", strcpy(dest1, str)); //Hello 출력 printf("strncpy 결과: %s\n", strncpy(dest2, str, 3)); //Hel 출력 return 0; }
- strcat(dest, src); // src + dest
- strncat(dest, src, n) //src 중 n개 + dest + '\0'
#include <stdio.h>
#include <string.h>
int main(void) {
char str[] = "Hello";
char dest1[] = "haebin";
char dest2[] = "haebin";
printf("strcat 결과: %s\n", strcat(dest1, str)); //haebinHello 출력
printf("strnccat 결과: %s\n", strncat(dest2, str, 3)); //haebinHel 출력
return 0;
}
- strcmp(one, two); // one > two 일 때 1, one == two 일 때 0, one < two 일때 -1 반환
#include <stdio.h>
#include <string.h>
int main(void) {
printf("%d\n", strcmp("ABC", "ABB") ); //1 출력
printf("%d\n", strcmp("ABC", "ABC") ); //0 출력
printf("%d\n", strcmp("ABA", "ABB") ); //-1 출력
return 0;
}
- strchr(str, ch); //str에서 ch(문자)를 찾아서 주소 반환. 없으면 NULL 반환. 여러 개일 땐 첫 번째 주소 반환.
#include <stdio.h>
#include <string.h>
int main(void) {
char name[20] = "Hong gil dong";
char* p = strchr(name, 'g'); //주소 반환이므로 포인터
printf("%d\n", (int)(p - name)); //p의 주소에서 name의 주소를 뺌.
return 0;
}
//name의 주소가 100이었다면 H:100 o:101 n:102 g:103 그래서 p - name 을 하면 103 - 100 = 3 이 나온다.
- strstr(str, sustr) //str 안에서 sustr(문자열)을 찾아서 주소 반환. 없으면 NULL반환.
#include <stdio.h>
#include <string.h>
int main(void) {
char name[20] = "Hong gil dong";
char* p = strstr(name, "gil");
printf("%d\n", (int)(p - name)); //5출력
}
- strtok(char *str, const char *delimiter) //delimiter로 토큰을 분리 후 문자열 반환. 없으면 NULL 반환.
#include <stdio.h>
#include <string.h>
int main(void) {
char name[20] = "Hong gil dong";
char *firstName, *middleName, *lastName;
firstName = strtok(name, " "); //name부터 빈칸이 나올 때까지 분리
middleName = strtok (NULL , " "); //NULL부터 빈칸이 나올 때까지 분리
lastName = strtok(NULL, "\0"); //NULL부터 빈칸 또는 \0 이 나올 떄까지 분리
printf("%s\n%s\n%s", firstName, middleName, lastName);
/*
Hong
gil
dong
출력
*/
}
- int atoi(str); //문자열 숫자 str을 int형으로 반환. *#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char str[] = "1";
printf("%d %s\n", str[0], str);
atoi(str);
printf("%d\n", str);
return 0;
}
//여쭤보기
//double atof (const char *str); 은 문자열을 double형으로 변환함.