본문 바로가기

C언어

컴프 10주차

*표준 입력 장치 : 키보드

*표준 출력 장치 : 모니터

*표준 입출력 함수 : 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형으로 변환함.

'C언어' 카테고리의 다른 글

컴프 11주차  (0) 2023.11.10
컴프 9주차 요약  (0) 2023.11.04
컴프 7주차  (0) 2023.10.14
6주차 복습  (0) 2023.10.10
컴프 6주차 1차시  (0) 2023.10.07