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

Slides:



Advertisements
Similar presentations
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
Advertisements

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 Part 03 상수, 변수, 자료형 안산 1 대학 디지털정보통신과 임 성 국. 2 이 장의 내용 자료형이란 무엇인가 ? 상수와 변수 정수형 부동소수형 문자형.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
컴퓨터 개론 및 실습 강의 6 서울대학교 기계항공공학부 담당 : 김 찬 중.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
제 9 장 포인터.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
8. 배열.
제 9 장 구조체와 공용체.
Chapter 15 문자열.
-Part2- 제3장 포인터란 무엇인가.
윤 홍 란 포인터 윤 홍 란
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
3. printf()와 데이터 형식.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
5장 배열 작성자 : 변재현.
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
10장 함수.
Name Title Company Name
C 프로그래밍.
Heesang kim PL/SQL 3 Heesang kim.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
포인터 활용 포인터 활용.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
11 표준 입출력과 파일 입출력 데이터를 읽고 쓰는 다양한 방법 익히기!.
6장. printf와 scanf 함수에 대한 고찰
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C#.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
5장 배열과 문자열 C 프로그래밍.
8주차: Strings, Arrays and Pointers
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
Canary value 스택 가드(Stack Guard).
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
제 6 장 함수(functions).
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
Chapter 12 파일 입출력.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
제 4 장 Record.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
텀프로젝트 포인터, 구조체 PSLab. 이태호.
Chapter 16. 메모리 동적 할당.
김선균 컴퓨터 프로그래밍 기초 - 12th : 문자열 - 김선균
어서와 C언어는 처음이지 제21장.
13. 포인터와 배열! 함께 이해하기.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
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'}; ©우균, 창병모

©우균, 창병모

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

포인터와 문자열 문자형 포인터 변수를 사용하여 문자열을 가리킬 수 있다. 예를 들어 char *포인터변수명; char *p  = "Hello"; char m[] = "world";     ©우균, 창병모

포인터 대입 p = m; 실행 후 ©우균, 창병모

©우균, 창병모

포인터를 이용한 문자열 입력 문자형 포인터 변수의 선언 예 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 *ptr[3] = {"red", "cian", "black"};  ©우균, 창병모

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

©우균, 창병모

©우균, 창병모

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이 가리키는 문자열로부터 데이터를 읽어 들인다. ©우균, 창병모

©우균, 창병모

©우균, 창병모

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'은 길이에 포함되지 않음 ©우균, 창병모

©우균, 창병모

실행 결과 ©우균, 창병모

문자열 복사함수 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 ©우균, 창병모

문자열 접합 함수 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) 실행 전 ©우균, 창병모

©우균, 창병모

실행 결과 ©우균, 창병모

문자열 비교 함수 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개의 문자까지 비교 ©우균, 창병모

©우균, 창병모

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

©우균, 창병모

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

©우균, 창병모

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

©우균, 창병모

실행결과 ©우균, 창병모

©우균, 창병모

실행결과 ©우균, 창병모

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

©우균, 창병모

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 ©우균, 창병모

©우균, 창병모

©우균, 창병모

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')를 만날 때마다 줄의 개수를 증가시킨다. ©우균, 창병모