View
35
Download
7
Category
Preview:
DESCRIPTION
강의 내용 ( 아홉 번째 ). 오늘 강의 내용 (5 월 17 일 ) : 6 장 배열 문자 배열 예습 (5 월 24 일 ) 7 장 함수 숙제 없음. 6.4 문자배열. 6.4.1 문자배열. 문자열을 처리하는 방법에는 문자배열 (character arrays) 을 사용하는 방법과 포인터를 사용하는 방법이 있다 . 여기서는 배열을 이용한 방법만을 배우기로 한다. 문자열 상수. 문자열 상수는 “ …” 로 문자열을 묶어 주기만 하면 된다 . - PowerPoint PPT Presentation
Citation preview
1YES C 제 6 장 배열과 문자열
강의 내용 ( 아홉 번째 ) • 오늘 강의 내용 (5 월 17 일 ) : 6 장 배열
– 문자 배열• 예습 (5 월 24 일 )
– 7 장 함수• 숙제
– 없음
2YES C 제 6 장 배열과 문자열
6.4 문자배열
3YES C 제 6 장 배열과 문자열
6.4.1 문자배열
• 문자열을 처리하는 방법에는 문자배열(character arrays) 을 사용하는 방법과 포인터를 사용하는 방법이 있다 .
• 여기서는 배열을 이용한 방법만을 배우기로 한다 .
4YES C 제 6 장 배열과 문자열
문자열 상수
• 문자열 상수는 “…”로 문자열을 묶어 주기만 하면 된다 .
주 소 0x01 0x02 0x03 0x04 0x05 0x06 0x07 ASCII 코드 0x53 0x74 0x72 0x69 0x6E 0x67 0x00 문 자 S t r i n g (NULL) ( 주소는 임의로 정한 주소임 )
• 문자열의 마지막에는 NULL 문자열이 들어간다 .
5YES C 제 6 장 배열과 문자열
문자열 변수
• C 에서는 문자열 데이터형이 없으므로 문자 배열을 사용하여 문자열 처리를 한다 .
char 배열이름 [ 문자열길이 +1]=“ 초기문자열” ;
6YES C 제 6 장 배열과 문자열
• 문자열을 복사할 때는 strcpy 함수를 이용하여야 하며 , 직접 대입할 수 없다 .
• 직접 대입을 할 경우는 하나씩 배열의 요소에 넣어야 한다 .char str[10] = "String"; strcpy( 문자배열이름 , 문자열 );strcpy(str,"Welcome!"); str="Hello!"; /* 이렇게 사용할 수는 없다 . */ str[0]='H'; /* 대입연산자를 사용할 경우는 일일이
이렇게 한 문자씩 대입한다 . */ str[1]='e'; str[2]='l'; str[3]='l'; str[4]='o'; str[5]='!'; str[6]=NULL; /* 또는 str[6]='\0'; */
7YES C 제 6 장 배열과 문자열
문자열 상수의 초기화
• const char str[10]="String"; • const char str[]="String";
8YES C 제 6 장 배열과 문자열
예제 6.20문자열 복사함수를 사용하는 방법과 하나의 배열 요소에 대입하는 방법 .
/* 파일 이름 : 문자열 처리 프로그램 . */ #include <stdio.h> #include <string.h> void main(void) { char str[10]; strcpy(str,"welcome"); printf("%s\n",str); str[0]='W'; printf("%s\n",str); }
9YES C 제 6 장 배열과 문자열
특수 문자
문자 기능\a Beep 음을 컴퓨터 스피커로 출력\b Back space\n 현재 위치한 줄의 다음 줄로 내려간다 .\r 현재 위치한 줄의 맨 처음으로 간다 .\t 수평 Tab\v 수직 Tab\\ \( 역슬래쉬 )\‘ 작은 따옴표\“ 큰 따옴표\0 NULL 문자\0?? 8 진수 ?? 에 대한 문자\x?? 16 진수 ?? 에 대한 문자 .
10YES C 제 6 장 배열과 문자열
예제 6.21 특수문자 처리하는 방법 . #include <stdio.h> void main(void) { printf("C Programming\n"); printf("C \bProgramming\n"); printf("\'C\' Programming\n"); printf("\"C Programming\"\n"); printf("C \tProgramming\n"); printf("C \rProgramming\n"); printf("C\n\tProgramming\n"); printf("C Programming\a\n"); }
11YES C 제 6 장 배열과 문자열
6.4.2 문자분류 및 문자변환 표준함수함수 설명 해당문자
isalnum(int c) 알파벳 또는 숫자인가 ? A~Z, a~z, 0~9
isalpha(int a) 알파벳인가 ? A~Z, a~z
isascii(int a) ASCII 문자인가 ?
iscntrl(int a) 제어문자인가 ?BEL, BS, CR, FF, HT, NL, VT
isdigit(int a) 10 진수인가 ? 0~9
isgraph(int a) 그래픽 문자인가 ? isalnum or ispunctislower(int a) 소문자인가 ? a~z
isprintf(int a) 출력 가능한 문자인가 ? isgraph or isspace
ispunct(int a) 구두점 문자인가 ?! # % & ( ) ; < = > ? [ \ ] + , . / : ^ _ { | }
isspace(int a) 공백문자인가 ?CR, FF, HT, NL, VT, space
isupper(int a) 대문자인가 ? A~Z
isxdigit(int a) 16 진수인가 ? 0~9, A~F, a~f
12YES C 제 6 장 배열과 문자열
6.4.2 문자분류 및 문자변환 표준함수 ( 계속 )
함수 설명toascii(int a) ASCII 로 변환tolower(int a) 소문자로 변환toupper(int a) 대문자로 변환char *strupr(char *s) 문자열을 대문자로 변환char *strlwr(char *s) 문자열을 소문자로 변환
13YES C 제 6 장 배열과 문자열
예제 6.22toupper() 를 사용하여 문자열을 한번에 한 문자씩 대문자로 변환하는 예제 .
#include <stdio.h> #include <ctype.h> void main(void){ char name[80]; int loop; printf("Enter in a name in lowercase\n"); scanf( "%s", name ); for( loop = 0; name[loop] != 0; loop++ ) name[loop] = toupper( name[loop] ); printf("The name in uppercase is %s", name);}
14YES C 제 6 장 배열과 문자열
예제 6.23예제 6.22 를 strupr 함수를 사용하여 한꺼번에 대문자로 바꾸기
#include <stdio.h> #include <string.h> void main(void) { char name[80]; /*declare an array of characters 0-79*/
printf("Enter in a name in lowercase\n"); scanf( "%s", name ); strupr( name ); printf("The name is uppercase is %s\n",name ); strlwr( name ); printf("The name is lowercase is %s\n",name ); }
15YES C 제 6 장 배열과 문자열
보이는 문자 (visible graphic character)
구분 해당 문자alphabet A~Z, a~z
digit 0~9
underscore _
punctutation! " # % & ' ( ) * + , -
. / : ; < = > ? [ \ ] ^ { | } ~
16YES C 제 6 장 배열과 문자열
추가 그래픽 문자(Additional graphic characters)
문자 기능space Blank space
BEL Bell( 경고음 )
BS Back space
FF Form feed
NL New line
CR Carriage return
HT Horizontal tab
VT Vertical tab
17YES C 제 6 장 배열과 문자열
제어 문자 (escape sequence)
문자 기능“ \”
‘ \’
? \?
\ \\
BEL \a
BS \b
FF \f
NL \n
CR \r
HT \t
VT \v
18YES C 제 6 장 배열과 문자열
숫자를 이용한 제어 문자(numerical escape sequence)
표시 기능\d or \dd or \ddd 10 진수 escape sequence
\xh or \xhh 16 진수 escape sequence\0oo or \0ooo 8 진수 escape sequence
19YES C 제 6 장 배열과 문자열
예제 6.24문자처리함수를 이용한 프로그램이다 . 그 결과를 분석해보자
#include <stdio.h> #include <ctype.h> #include <conio.h> void main(void) { int c; printf("\n isalpha : \n"); for(c=0;c<127;c++) if(isalpha(c))putchar(c); printf("\n isdigit :\n"); for(c=0;c<127;c++) if(isdigit(c))putchar(c); printf("\n islower :\n");
20YES C 제 6 장 배열과 문자열
예제 6.24( 계속 )
for(c=0;c<127;c++) if(islower(c))putchar(c); printf("\n ispunct :\n"); for(c=0;c<127;c++) if(ispunct(c))putchar(c); printf("\n isupper :\n"); for(c=0;c<127;c++) if(isupper(c))putchar(c); getch(); }
21YES C 제 6 장 배열과 문자열
6.4.3 데이터 변환함수 기능
double atof(char *string) 스트링을 부동소수점으로 변환
int atoi(char *string) 스트링을 long integer 로 변환
char *itoa(int value, char *string, int radix)
정수를 주어진 기수법으로 스트링으로 변환
char *ltoa(long value, char *string, int radix)
long 정수를 주어진 기수법으로 스트링으로 변환
double strtod(char *string, char *endptr)
스트링을 double 부동소수점으로 변환
long strtol(char *string, char *endptr, int radix)
스트링을 주어진 기수법으로 long 정수로 변환
unsigned long strtoul(char *string, char *endptr, int radix)
스트링을 unsigned long 으로 변환
22YES C 제 6 장 배열과 문자열
예제 6.25문자열을 숫자 데이터형으로 변환하는 프로그램 . 문자열은 계산이 안되지만 숫자로 변환한 후에는 계산이 가능하게 된다 .
#include <stdio.h>
#include <stdlib.h>
void main(void) {
char string1[] = "12.434";
char string2[] = "43.534";
char string3[] = "453", string4[] = "985";
/* printf("%s", string1 + string2); 이 부 분 은 컴파일 시 에러가 난다 . 문자열은 덧셈을 할 수 없으며 , 어떤 컴파일러에서는 되는 곳도 있다 .*/
23YES C 제 6 장 배열과 문자열
예제 6.25( 계속 )
printf("%f\n",atof(string1) + atof(string2));
/* 실수로 변환이 되었으므로 연산이 가능하다 . */
/* printf("%s", string3 + string4);
마찬가지로 에러가 발생한다 .*/
printf("%d\n",atoi(string3) + atoi(string4));
/* 정수로 변환이 되었으므로 연산이 가능하다 . */
}
24YES C 제 6 장 배열과 문자열
6.4.4 스트림 입출력함수 기능
int fgetc(FlLE *file_pointer) 스트림으로부터 한 문자 가져오기
char *fgets(char *string, int maxchar, FILE *file_pointer)
파일로부터 스트링 읽기
int fputc(int c, FILE *file_pointer) 스트림에 한 문자 쓰기
int fputchar(int c) stdout 에 한 문자 쓰기
int fputs(char *string, FILE *file_pointer)
스트림에 스트링 쓰기
int getc(FlLE *file_pointer) 스트림으로부터 한 문자 읽기
int getchar(void) stdin 으로부터 한 문자 읽기
char *gets(char *buffer) stdin 으로부터 한 줄을 읽어서 버퍼에 넣기
int printf(const char *format, args); stdout 으로 형식화된 출력 쓰기
25YES C 제 6 장 배열과 문자열
6.4.4 스트림 입출력 ( 계속 )
함수 기능int putc(int c, FILE *file_pointer) 한 문자를 스트림에 쓰기int putchar(int c) stdout 에 한 문자 쓰기int puts(char *string) stdout 에 스트링 쓰기
int scanf(char *format_string, args)stdin 으로부터 형식화된 입력 읽기
int sprintf(char *string,
char *format_string, args)스트링에 형식화된 출력 쓰기
int sscanf(char *buffer,
char *format_string, args)스트링으로부터 형식화된 입력 읽기
26YES C 제 6 장 배열과 문자열
6.4.5 문자열 처리함수 기능
char *strcat(char *s1, const char *s2);
s1 에 s2 를 추가하고 s1 을 return
char *strchr(const char *s, int c);s 에서 c 가 발생하는 첫 번째 위치 찾기
int strcmp
(const char *s1, const char *s2)
s1 과 s2 를 비교 , 두 문자열 이 같으면 0, s1 이 크면 양수 , 아니면 음수를 return
int strcoll
(const char *s1, const char *s2);
s1 과 s2 비교 , s1 이 크면 양수 , 같으면 0, 아니면 음수를 return
char* strcpy(char *s1, const char *s2)
s2 에서 s1 로 스트링 복사
size_t strcspn
(const char *s1, const char *s2);
1 에서 s2 와 같은 문자열 검색 , 문자열이 있으면 위치 return
27YES C 제 6 장 배열과 문자열
6.4.5 문자열 처리 ( 계속 )
함수 기능char* strerror(int errcode) 특정한 에러번호에 해당하는 에러 메시지
획득 int strlen(const char *string) 스트링의 길이 획득
char* strncat
(const char *s1, const char *s2, size_t n)
s2 로부터 n 개의 문자를 s 에 추가
int strncmp
(const char *s1, const char *s2, size_t n)
두 스트링의 처음 n 개의 문자를 비교 , 두 문자열이 같으면 0, s1 이 크면 양수 , 아니면 음수를 return
char* strncpy
(char *s1, char *s2, size_t n)처음 n 개의 문자를 s2 에서 s1 로 복사
char* strrchr(char *s, int c)s 에서 문자 c 가 마지막으로 발견되는 위치 찾기
28YES C 제 6 장 배열과 문자열
예제 6.28문자열 처리 함수를 이용한 프로그램이다 .
#include <stdio.h> #include <conio.h> #include <string.h> void main(void){ char a[30],b[30],pass[10],s1[15],s2[15]; printf("/*strcat()=string1+string 2 */\n\n"); printf("input string 1:"); gets(a); printf("input string 2:"); gets(b); printf("\n\n string1 + string2 = %s \n",
strcat(a,b)); printf("\n\n/* strcmp() = compare string1 with
string2 */ \n"); printf("\n\nif your password is....h6614 \n");
29YES C 제 6 장 배열과 문자열
예제 6.28( 계속 )
do{ printf("Your Password : "); gets(pass); if(strcmp(pass,"h6614")) printf("invalid password\n"); else break; } while(1);
printf("\n O.K"); getch(); printf("\n/*strcpy(s1,s2)=Copy s2 to s1*/ \n");
printf("input string s2 :"); gets(s2); strcpy(s1,s2); printf("s1 = %s\n",s1); getch(); }
Recommended