Part 11 문자열 ©우균, 창병모 ©우균, 창병모.

Slides:



Advertisements
Similar presentations
03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C.
Advertisements

Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티.
National University 1 / 17 컴퓨터 개론 및 실습 강의 6.
C 프로그래밍 기초.
순천향대학교 정보보호연구회 김 홍 기 포인터와 문자열 순천향대학교 정보보호연구회 김 홍 기
2007 1학기 12 배열.
데이터의 표현과 연산 (1) (Chapter 3)
제12장 표준 입출력과 파일 입출력.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
Chapter 10– 표준 함수(1) Outline 10.1 스트림과 파일 10.2 입출력 표준 함수
제 2 장 배열과 스트링.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
C언어: 배열 (Arrays).
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
버퍼 오버플로우 시스템보안 류기환 권재홍.
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
21장. 문자와 문자열 처리 함수.
9장 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
표준 출력 함수 printf 출력 데이터 서식화(formatting) 표준 입력 함수 scanf 입력 데이터 서식화
Part 04 입출력과 전처리 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
제 2 장 변수와 상수.
Chapter 11 Strings.
C언어 프로그래밍의 이해 Ch14. 파일 입출력.
-Part3- 제2장 문자열 표준 함수와 기타 표준 함수
Chapter 13 Input/Output and Files
13. 포인터와 배열! 함께 이해하기.
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
제2장 데이터형과 표준 입출력문 문봉근.
2019년 2월 24일 오후 4시 59분 제2장 표준 입출력 함수
Chapter 10 Strings and Pointers
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 11. 1차원 배열.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
Formatted Input/Output
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
문자열과 배열 문자열 입출력 문자열 처리 함수 문자 처리 함수 문자열의 배열
Chapter 05. 입출력 함수.
Chapter 12. String 클래스의 디자인
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
C언어 (8) 정명희.
컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수
기본 테이블세팅(로맨틱) 푸드스타일리스트 전공 김선아.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
컴퓨터 프로그래밍 기초 #13 : 문자열 Seong-Yun Choi
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
국어지도 유아교육과 권수연 김아람 중등특수교육과 박수진 양한솔
argc, argv 의 사용방법 #include <stdio.h>
텀프로젝트 포인터, 구조체 PSLab. 이태호.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
C.
printf("Global Korea\n");
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
Chapter 09. 배열.
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
배열.
11장. 1차원 배열.
Presentation transcript:

Part 11 문자열 ©우균, 창병모 ©우균, 창병모

이 장의 내용 문자열과 문자배열 포인터와 문자열 문자열과 포인터 배열 문자열 입출력 문자열 함수 main() 함수의 명령줄 인수 ©우균, 창병모

11.1 문자열과 문자배열 ©우균, 창병모

문자열(string) 0개 이상의 연속적으로 나열된 문자들로 큰따옴표 "로 감싸서 나타낸다. 예 0개 이상의 연속적으로 나열된 문자들로 큰따옴표 "로 감싸서 나타낸다.  예 "Hello" : 문자열 "A" : 문자열 'A' : 문자 C 언어에서 문자열은 문자 배열 형태로 저장된다. ©우균, 창병모

문자열 변수의 선언과 초기화 문자 배열 형태로 선언하며 배열의 크기는 문자 배열 선언 및 예 문자열 변수 초기화 문자 배열 형태로 선언하며 배열의 크기는 저장할 문자열 길이보다 최소 1 이상 커야 함. 문자 배열 선언 및 예 char 배열명[크기]; char s[16];  문자열 변수 초기화 char 배열명[크기] = "문자열"; char 배열명[ ] = "문자열"; ©우균, 창병모

문자열 변수의 선언과 초기화 예를 들어 char s[16] ="C programming !"; char t[ ] = "C programming !";  char s[ ] = "C 프로그래밍 !"; char s[16]= {'C',' ','p','r','o','g','r','a','m','m','i','n','g',' ','!','\0'}; ©우균, 창병모

cprogramming.c 실행결과: C 프로그래밍 ! ©우균, 창병모

11.2 포인터와 문자열 ©우균, 창병모

포인터와 문자열 문자형 포인터 변수를 사용하여 문자열을 가리킬 수 있다. 예를 들어 char *포인터변수명; char *p  = "Hello"; char m[] = "world";     H e l l o \0 p m[0] m[1] m[2] m[3] m[4] m[5] m w o r l d \0 ©우균, 창병모

포인터 대입 p = m; 실행 후 H e l l o \0 p w o r l d \0 m m[0] m[1] m[2] m[3] ©우균, 창병모

print.c 실행결과: Hello! ©우균, 창병모

포인터를 이용한 문자열 입력 문자형 포인터 변수의 선언 예 1 (실행 시간 오류) 예 2 예 3 포인터(주소)를 저장하기 위한 기억공간만 할당 문자열이 저장될 기억장소는 확보되지 않음 예 1 (실행 시간 오류) char *name; scanf("%s", name); 예 2 char name[81]; 예 3 char name[81], *p = name; scanf("%s", p); ©우균, 창병모

11.3 문자열과 포인터 배열 ©우균, 창병모

문자열과 포인터 배열 여러 개의 문자열을 저장하는 방법 포인터 배열(pointer array) 이용 문자형의 이차원 배열을 사용 char colors[3][10]= {"red", "blue", "white"};  포인터 배열(pointer array) 이용 배열의 각 원소가 포인터인 배열을 포인터 배열이라고 한다. 여러 개의 문자열들을 저장하는데 사용 char *colorp[3] = {"red", "blue", "white"};  ©우균, 창병모

문자열과 포인터 배열 r e d \0 colors[0] colors[1] b l u e \0 colors[2] w h i t e \0 r e d \0 b l u e \0 colorp[0] colorp[1] colorp[2] ©우균, 창병모

pointerArray.c 실행결과: red  blue  white ©우균, 창병모

11.4 문자열 입출력 ©우균, 창병모

문자열 입출력: gets()와 puts() 한 번에 한 문자열을 입력/출력할 수 있다. char *gets(char *str);  표준 입력으로부터  문자열을 읽어 들여 문자형 포인터 str이 가리키는 기억장소에 저장하고 포인터 str를 리턴한다 int puts(char *str);  str이 가리키는 문자열을 표준 출력에 출력한다. ©우균, 창병모

sscanf()와 sprintf() sscanf() 함수와 sprintf() 함수 scanf(), printf() 함수와 사용 방법과 역할은 비슷함. 표준 입출력 대신에 문자열에 대해 입출력 int sprintf(char *str, char *format, ...); 문자열에 출력하는 함수로 포인터 str이 가리키는 곳에 문자열 형태로 출력한다. int sscanf(char *str, char *format, ...); 문자열로부터 입력을 받는 함수로 포인터 str이 가리키는 문자열로부터 데이터를 읽어 들인다. ©우균, 창병모

stringio.c 실행결과: C programming language C programming language C programming language is beautiful ©우균, 창병모

11.5 문자열 함수 ©우균, 창병모

문자열관련 라이브러리 함수 문자열 함수 설명 strlen(str) 문자열 str의 길이를 리턴한다. strcpy(str1, str2) 문자열 str2를 str1으로 복사한다. strcat(str1, str2) 문자열 str2를 str1에 접합한다. strcmp(str1, str2) 문자열 str1과 str2를 비교한다. strchr(str, ch) 문자열 str에서 문자 ch가 처음 나타난 위치를 리턴한다. strstr(str1, str2) 문자열 str1에서 문자 str2가 처음 나타난 위치를 리턴한다. strtok(str1, str2) 문자열 str1에서 문자열 str2 내의 문자를 토큰으로 하여 다음 토큰의 포인터를 리턴한다. atoi(str) 문자열 str을 int 정수로 변환하여 리턴한다. atol(str) 문자열 str을 long int 정수로 변환하여 리턴한다. atof(str) 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. ©우균, 창병모

문자열 길이 함수 문자열의 길이는 문자열 내에 있는 문자의 개수이다. int strlen(char *str); 문자열의 끝에 있는 '\0'은 길이에 포함되지 않음 ©우균, 창병모

stringLength.c 실행결과: 문자열들을 입력하세요 spring 문자열의 길이: 6 summer 문자열의 길이: 6 문자열의 길이:  6 winter fall 문자열의 길이: 4 전체 문자열의 개수:      4 전체 문자열의 길이의 합: 22 ©우균, 창병모

문자열 복사함수 strcpy(t,s) char *strcpy(char *str1, char *str2); 문자열 str2를 str1에 복사하고 포인터 str1을 리턴 str1이 가리키는 기억 장소는 문자열을 복사할 수 있을 만큼 충분히 커야 함. char *strncpy(char *str1, char *str2, int n) str2의 최대 n바이트를 str1에 복사 ©우균, 창병모

stringCopy.c 실행결과: 문자열 s = Hello 문자열 t = Hello 문자열 p = world 문자열 q = world 문자열 s = Good 문자열 p = Bye 문자열 q = Bye ©우균, 창병모

stringCopy.c                                                                                                문자열 복사                                                                                문자열 변경 후 ©우균, 창병모

문자열 접합 함수 strcat() 함수 char *strcat(char *str1, char *str2); 두 문자열을 접합하여 새로운 문자열을 만드는 함수 char *strcat(char *str1, char *str2); str1의 문자열 끝('\0')에 str2의 문자열 시작을 접합한다. str1의 기억장소는 두 문자열을 연결할 수 있을 만큼 충분히 커야 한다 포인터 str1을 리턴한다. char *strncat(char *str1, char *str2, int n) 최대 n개의 문자를 접합 ©우균, 창병모

문자열 접합 예 char s[80] = "Hello "; char t[] = "world"; strcat(s,t);                                                                                                                                                         strcat(s,t) 실행 전                                                                                                                                                          strcat(s,t) 실행 후 ©우균, 창병모

stringCat.c ©우균, 창병모

실행 결과 실행결과: 목적이 있는 인생을 살도록 합시다. ^Z 입력된 문자열의 개수: 3 입력된 문자열의 개수:    3 접합된 전체 문자열:      목적이 있는 인생을 살도록 합시다. 접합된 전체 문자열 길이: 33 ©우균, 창병모

문자열 비교 함수 strcmp() 함수 char *strcmp(char *str1, char *str2); 두 개의 문자열을 차례로 한 문자씩 비교하는 함수 char *strcmp(char *str1, char *str2); 두 문자열을 차례로 한 문자씩 비교한다.  두 문자열이 같으면 0을 리턴 다르면 서로 다른 문자의 차이(ASCII 코드값의 차이)를 리턴 str1 문자열이 str2 문자열 보다 크면 양수를 작으면 음수 리턴 char *strncmp(char *str1, char *str2, int n) 최대 n개의 문자까지 비교 ©우균, 창병모

stringCmp.c 실행결과: -4 C Language C Programming ©우균, 창병모

문자열 내의 특정 문자 검색 함수 strchr(), strrchr() 함수 문자열 내의 특정 문자의 위치를 검색하는 함수이다. 문자열 내의 특정 문자가 처음/마지막으로 나타난 위치(포인터) char *strchr(char *st1, char c); str이 가리키는 문자열에서 문자 c가 처음으로 나타난 위치의 포인터를 리턴. c가 없으면 NULL을 리턴. char *strrchr(char *st1, char c); str이 가리키는 문자열에서 문자 c가 마지막으로 나타난 위치의 포인터를 리턴. c가 없으면 NULL을 리턴. ©우균, 창병모

stringChr.c 실행결과: rogramming ramming ©우균, 창병모

문자열 내의 특정 문자열 검색 함수 strtrstr() 함수 문자열 내의 특정 문자열의 위치를 검색하는 함수 char *strstr(char *str1, char *str2); str2이 가리키는 문자열을 str1이 가리키는 문자열에서 찾아 처음으로 발견되는 문자열의 위치 포인터를 리턴 찾는 문자열이 없으면 NULL을 리턴 ©우균, 창병모

stringStr.c 실행결과: Language Programming ©우균, 창병모

문자열 변환 함수 수를 나타내는 문자열을 읽어 들이면 문자열 형태로 저장 산술 연산을 위해서는 정수 혹은 부동소수점 수로 변환 산술 연산을 위해서는 정수 혹은 부동소수점 수로 변환 int atoi(char *str);       문자열 str을 int 정수로 변환하여 리턴한다. long atol(char *str); 문자열 str을 long int 정수로 변환하여 리턴한다. double atof(char *str); 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. ©우균, 창병모

intSum.c ©우균, 창병모

실행결과 실행결과: 구매한 금액들을 입력하세요. 25000 1800 99000 800 ^Z 총 4 개 구매하였고 총액은 126600 입니다 ©우균, 창병모

floatSum.c ©우균, 창병모

실행결과 실행결과: 구매한 금액들을 입력하세요. 15.5 31.40 180.05 29.99 ^Z 총 4 개를 구매하였고 총액은 256.99 입니다 ©우균, 창병모

토근 추출 strtok() 함수 char *strtok(char *str1, char *str2); 하나의 큰 문자열로부터 토큰(단어)을 추출해 내는 함수 긴 문자열 내에 있는 각 단어에 대한 조작에 사용 char *strtok(char *str1, char *str2); str2 문자열에 포함되어 있는 문자들을 분리자(delimiter)로 사용 포인터 str1이 가리키는 문자열에서 토큰을 추출 처음 호출: 최초의 토큰에 대한 포인터가 리턴 다음 호출: str1 대신에 NULL을 지정하여 다음 토큰의 포인터가 리턴 이 함수가 NULL을 리턴할 때까지 이 과정을 반복 가능 ©우균, 창병모

stringTok.c 실행결과: C language  programming ©우균, 창병모

11.6 main()의 인수 ©우균, 창병모

명령줄 인수(command-line argument) int main(int argc, char *argv[])의 2개의 매개변수 int argc 명령줄 인수들의 개수를 저장하기 위한 정수형 변수 char *argv[]; 명령줄 인수들을 저장하기 위한 문자열 포인터 배열 argv[0] 실행 프로그램의 이름 argv[1] 첫 번째 인수 argv[2] 두 번째 인수 argv[i] i 번째 인수 ©우균, 창병모

명령줄 인수 C\:> echo hello world ©우균, 창병모

echo1.c 실행결과: C:> echo1 hello, world hello, world ©우균, 창병모

echo2.c ©우균, 창병모

Key Point ©우균, 창병모

Key Point 1 C 언어에서 문자열은 문자 배열 형태로 저장된다. 문자형 포인터 변수를 사용하여 문자열을 가리킬 수 있다. 배열의 각 원소가 포인터인 배열을 포인터 배열이라 한다. gets(), puts() 한 번에 하나의 문자열을 입력 혹은 출력한다. atoi(str) 문자열 str을 int 정수로 변환하여 리턴한다. atol(str) 문자열 str을 long int 정수로 변환하여 리턴한다. atof(str) 문자열 str을 double 부동소수점 수로 변환하여 리턴한다. main()의 매개변수 argc, argv argc는 명령어 줄 인자의 개수를 저장하기 위한 정수형 변수 argv는 명령줄 인수들을 저장하기 위한 문자열 포인터 배열. ©우균, 창병모

Key Point 2 strlen(str) 문자열 str의 길이를 리턴한다. strcpy(str1, str2) strcat(str1, str2) 문자열 str2를 str1과 접합한다. strcmp(str1, str2) 문자열 str1과 str2를 비교한다. strchr(str, ch) 문자열 str에서 문자 ch가 처음 나타난 위치를 리턴한다. strstr(str1, str2) 문자열 str1에서 문자 str2가 처음 나타난 위치를 리턴한다. strtok(str1, str2) 문자열 str1에서 문자열 str2 내의 문자를 토큰으로 하여 다음 토큰의 포인터를 리턴한다. ©우균, 창병모

프로그래밍 실습 ©우균, 창병모

▶ 프로그래밍 실습 1. 입력으로 받은 여러 줄의 문자열에 대해서 문자의 개수를 출력하는 프로그램을 작성하여라. (1) 한 번에 한 문자씩 파일 끝까지 읽으면서 문자의 개수를 계산한다. ©우균, 창병모

▶ 프로그래밍 실습 2. 위 프로그램을 확장하여 단어의 개수와 줄의 개수도 출력하는 프로그램을 작성하여라. (1) 한 번에 한 문자씩 파일 끝까지 읽으면서 단어의 개수와 줄의 개수를 계산한다. (2) 단어와 단어 사이에는 하나 이상의 공백 문자가 있다. 공백을 만날 때마다 단어의 개수를 증가시킨다. (3) 줄의 개수는 개행문자('\n')의 개수를 세면된다. 따라서 개행문자('\n')를 만날 때마다 줄의 개수를 증가시킨다. ©우균, 창병모