Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 5 Character Processing

Similar presentations


Presentation on theme: "Chapter 5 Character Processing"— Presentation transcript:

1 Chapter 5 Character Processing
프로그래밍 기초와 실습 Chapter 5 Character Processing

2 Contents The Data Type char The Use of getchar() and putchar()
An Example: Capitalize The Macros in ctype.h Problem Solving: Repeating Characters Problem Solving: Counting Words

3 The Data Type char Char type 8bit의 ASCII code로 표현 총 256 개의 char 표현 가능
문자 또는 작은 수의 int로 표현 [Ex] printf(“%c”, ‘a’ ); /* a is printed */ printf(“%c%c%c”, ‘A’, ‘ B’, ‘C’ ); /* ABC is printed */ printf(“%d”, ‘a’ ); /* 97 is printed */ printf(“%c”, 97 ); /* a is printed */

4 Nonprinting and hard-to-print characters
The Data Type char Escape sequence Nonprinting and hard-to-print characters Name of character Written in C Integer value alert backslash backspace carriage return double quote formfeed horizontal tab newline null character single quote vertical tab \a \\ \b \r \” \f \t \n \0 \’ \v 7 92 8 13 34 12 9 10 39 11

5 The Data Type char Escape sequence 모든 정수형 수식은 문자형태나 정수형태로 나타낼 수 있다.
[Ex] printf(“\”ABC\” ”); /* “ABC” is printed */ printf(“’ABC’ ”); /* ‘ABC’ is printed */ [Ex] char c; int i; for ( i = ‘a’ ; i <= ‘z’; ++i ) printf(“%c”, i); /* abc … z is printed */ for ( c = 65; c <= 90 ; ++c ) printf(“%c”, c); /*ABC … Z is printed */ for ( c = ‘0’; c <= ‘9’ ; ++c ) printf(“%d ”, c); /* … 57 is printed */

6 The Data Type char [Ex] char c; c= ‘A’+5; printf(“%c %d\n”, c, c);
for( c = ‘A’; c <= ‘Z’; c++ ) ; printf(“%c\t”,c); F 70 B 66 A B C D E … Z

7 The Use of getchar() and putchar()
keyboard에서 문자를 읽는데 사용한다. Buffered scanf와 동일 - data의 read를 위해 Enter key의 입력이 필요하다 Enter key를 누르면 Enter key까지 포함한 입력되었던 모든 문자들은 stdin buffer로 보내진다. getchar() function은 문자들을 한번에 한문자씩 반환한다. c = getchar(); /* 한 char를 read하여 c에 입력 */

8 The Use of getchar() and putchar()
[Ex] while((c = getchar()) == ‘ ’) ; if((c = getchar()) == ‘\n’) exit() ; while( (c = getchar()) == ‘ ’ || c ==’\n’ || c == ‘\t’ ) ; Read한character가 space라면 계속 skip Enter key를 press시 program종료 white spaces를 skip

9 The Use of getchar() and putchar()
[Ex] #include <stdio.h> int main(void) { putchar(‘H’); putchar(‘a’); putchar(‘n’); putchar(‘D’); putchar(‘o’); putchar(‘g’); } putchar(‘ ‘)에 한 char만 사용가능 함. HanDong

10 The Use of getchar() and putchar()
키보드로 문자를 읽어서 두문자씩 출력하는 code [Ex] #include <stdio.h> int main(void) { int c; printf(“Enter a message:\n”); while (( c = getchar() ) != EOF) { putchar( c ); } return 0; EOF는 end-of-file의 뜻. Unix에서는 Ctrl + D 를 누르면 됨 Visual C 에서는 ctrl+c Enter a message: corea ꎠ ccoorreeaa (ctrl+D누름)

11 caps Program 소문자를 대문자로 변환하는 예제1 [Ex] #include <stdio.h>
int main(void) { int c; printf(“Enter a message:\n”); while (( c = getchar()) != EOF ) if ('a' <= c && c <= 'z' ) putchar( c + 'A' - 'a' ); else if ( c == '\n') { putchar('\n'); } else putchar(c); return 0; Enter a message: corea ꎠ COREA (ctrl+D누름) c에 e라는 문자를 입력했다고 하면 ascii code에서 e는 101이다. 여기서 ‘A’-’a’ 는65-97의 값과 같다. =69 즉 E의 값이 나온다.

12 Portable caps Program 소문자를 대문자로 변환하는 예제2 [Ex] #include <stdio.h>
#include <ctype.h> int main(void) { int c; printf(“Enter a message:\n”); while (( c = getchar()) != EOF ) if ( islower(c) ) putchar( toupper(c) ); else if ( c == '\n') { putchar('\n'); } else putchar(c); return 0; islower()와 toupper( )의 함수는 ctype.h란 header file 안에 정의되어있다. Enter a message: corea ꎠ COREA (ctrl+D누름)

13 The Macros in ctype.h ctype.h 헤더파일은 문자 인자를 검사하는 매크로들을 정의한다.
Character macros Macro Nonzero (true) is returned if isalpha(c) isupper(c) islower(c) isdigit(c) isalnum(c) isxdigit(c) isspace(c) ispunct(c) isprint(c) isgraph(c) iscntrl(c) isascii(c) c is a letter c is an uppercase letter c is a lowercase letter c is a digit c is a letter or digit c is a hexadecimal digit c is a white space character c is a punctuation character c is a printable charcter c is a printable, but not a space c is a control character c is an ASCII code

14 Character macros and functions
The Macros in ctype.h toupper() and tolower() functions Character macros and functions Function or macro Effect toupper(c) tolower(c) toascii(c) Changes c from lowercase to uppercase Changes c from uppercase to lowercase Changes c to ASCII code [Ex] int tolower(int c) ; /* c가 대문자라면 소문자가 리턴*/ int toupper(int c); /* c가 소문자라면 대문자가 리턴 */ #define _tolower(c) ( (c) + ‘a’ – ‘A’ ) /* 함수를 define하여 지정 */

15 Repeating Characters Problem Solving: Repeating Characters [Ex]
#include <ctype.h> #include <stdio.h> void repeat(char, int); int main(void) { int i; const char alert = '\a', c = 'A'; repeat('B' - 1, 2); putchar(' '); for (i = 0; i < 10; ++i) { repeat(c + i, i); } repeat(alert, 100); putchar('\n'); return 0; } /* end of main */ void repeat(char c, int how_many) for ( i = 0; i < how_many; ++i) putchar(c); } /* end of repeat function */ AA B CC DDD EEEE FFFFF GGGGGG HHHHHHH IIIIIIII JJJJJJJJJ

16 Counting Words Word의 개수를 세는 Program printf( "Enter a message:\n");
[Ex] #include <stdio.h> #include <ctype.h> int found_next_word(void); int main(void) { int word_count = 0; printf( "Enter a message:\n"); while (found_next_word() == 1) ++word_count; printf( “ Number of words = %d\n", word_count); return 0; } /* end of main */ /* ( Continue….) */ found_next_word( )의 함수가 실행되어 1(단어를찾음)을 리턴하면 word_count를 1증가 시킨다.

17 Counting Words Word의 개수를 세는 Program /* ( Continued….) */
int found_next_word(void) { int c; while ( isspace( c = getchar() ) ) ; /* skip white space */ if( c != EOF ) { /* found a word */ while ( ( c =getchar() ) != EOF && !isspace(c) ); /* skip all except EOF and white space */ return 1; } return 0; empty statement이다. 단어를 읽을 때 공백을 skip하게하는 while 문이다. 두 번째 while문 의 생략 시 char의 count가 됨- 말하자면 그 다음 char가 space가 아니므로 count가 됨 Enter a message: Our father in heaven ꎠ (ctrl+D누름) 컴파일러에 따라 ctrl+z Number of words = 4

18 Counting Words 문자의 길이, 단어의 개수, 문자의 개수를 구하는 프로그램 [Ex]
#include <stdio.h> main() { int len = 0, word = 1, character =0; char msg; printf("Enter a message: "); while ( (msg = getchar()) != '\n') len ++; /* (continue…… )*/

19 Counting Words 문자의 길이, 단어의 개수, 문자의 개수를 구하는 프로그램 /* ( continued ) */
if(( msg == ' ') || ( msg == '\n')) word++; else if(((msg >= 'a') && (msg <='z')) || ((msg >= 'A')&&(msg <= 'Z'))) character++; } printf("%d length.\n", len); printf("%d words.\n", word); printf("%d characters.\n", character); return 0; 공백이 들어갈 때마다 word를 증가시킴 영어단어의 범위에 들어갈 때마다 character를 증가시킴 단어와 단어 사이에 space가 여러 개 있는 경우는 다 word로 count됨 Tab key로 구분되는 경우는 1개의 단어로 간주 Enter a message: C programming ꎠ 13 length. 2 words. 12 characters.

20 수고하셨습니다 Character Processing


Download ppt "Chapter 5 Character Processing"

Similar presentations


Ads by Google