2013. 03. 22 컴퓨터 개론 및 실습 강의 6 서울대학교 기계항공공학부 담당 : 김 찬 중.

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)
National University 1 / 17 컴퓨터 개론 및 실습 강의 6.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
Power C++ 제6장 포인터와 문자열.
Part 11 문자열 ©우균, 창병모 ©우균, 창병모.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
8. 배열.
제 9 장 구조체와 공용체.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
자료 구조: Chapter 3 (2)구조체, 포인터
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
5장 배열 작성자 : 변재현.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
처음으로 배우는 C 프로그래밍 제4부 복합 데이터 형 제 9 장 문자열.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
Heesang kim PL/SQL 3 Heesang kim.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
6장. printf와 scanf 함수에 대한 고찰
Tail-recursive Function, High-order Function
프로그래밍 랩 – 7주 리스트.
14장. 포인터와 함수에 대한 이해.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
-Part3- 제2장 문자열 표준 함수와 기타 표준 함수
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
13. 연산자 오버로딩.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
어서와 C언어는 처음이지 제14장.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
포인터 1차원 배열과 포인터 2차원 배열과 포인터 문자열 배열과 포인터 포인터 배열
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
5장 선택제어문 if 선택문 switch-case 선택문 다양한 프로그램 작성 조건 연산자.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
C언어 (8) 정명희.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
제 6 장 함수(functions).
제 15 강 문자와 코드 shcho.pe.kr.
에어 PHP 입문.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
Spring, 2019 School of CSE Pusan National University
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
텀프로젝트 포인터, 구조체 PSLab. 이태호.
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
김선균 컴퓨터 프로그래밍 기초 - 12th : 문자열 - 김선균
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
배열.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

2013. 03. 22 컴퓨터 개론 및 실습 강의 6 서울대학교 기계항공공학부 담당 : 김 찬 중

포인터 (Pointer)와 문자열 (string) ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■ 문자열은 C언어에서 가장 많이 사용되는 배열이다. ■ 문자열 은 그 끝에 ‘\0’ (null character)을 가지므로 실제 기억장소는 따옴표 안에 있는 문자의 갯수보다 한 개가 더 필요하다. ■ 문자열 처리함수는 교과서 p.369 를 참조한다.

문자열의 구조 ■ 문자열의 구조 문자열은 항상 ‘\0’ (null character)을 마지막에 가진다. 예를 들어, “hello”는 다섯 글자로 이루어진 문자열이 아니라 와 같이 여섯 글자로 이루어진 문자열이다. ■ 표준 라이브러리 함수 strlen 문자열의 길이를 리턴하는 함수 strlen은 ‘\0’을 제외한 글자수를 리턴한다. 위의 경우 strlen(“hello”) 는 5를 리턴한다. 이것은 와 같이 0부터 5까지의 기억장소 (즉 6개의 기억장소)를 사용하는 것으로 처리하는 것이 훨씬 편리하기 때문이다. h e l o \0 [0] [1] [2] [3] [4] [5]

문자열 변수와 문자열 상수 ■ 문자열 변수와 문자열 상수 문자열 변수와 문자열 상수 ■ 문자열 변수와 문자열 상수 문자열 변수와 문자열 상수를 선언하고 초기화(initialization)하는 것은 char msg[] = "Rewrite here" ; // 문자열 변수 const char book[] = "Frozen String" ; // 문자열 상수 와 같이 큰 따옴표로 이루어진 상수 문자열을 이용한다. ■ 문자열의 원소(즉, 문자)에의 접근 문자열은 하나의 배열이므로 msg[i], *(book+i) 와 같이 포인터를 이용하여 각 문자에 접근한다. book[0] = '1'; // error C2166: l-value specifies const object 와 같이 문자열 상수의 값을 바꾸는 것은 불가능한다.

문자열 함수 strlen (std library) /* strlen : return length of s */ int strlen(char *s) { char *p = s; // 포인터 p를 이용하여 문자를 검색 while( *p ) ++p; // null 문자 ‘\0’을 만나면 종료 return p - s; } p ++p ☞ ☞ *p == 0 ★ ★ ★ ★ ★ ★ \0 s[] p가 이 위치에서 while을 빠져나온다

문자열 함수 strcpy (std library) 문자열의 복사는 원래의 문자열이 ‘\0’을 만날 때까지 (즉, 거짓일 때까지) 수행된다. ■ 표준 라이브러리 함수 strcpy /* strcpy : copy t to s */ void strcpy(char *s,char *t) { while( *s++ = *t++ ) ; // 포인터 s,t를 이용하여 문자를 복사 } // *s++ = *t++ 는 t 가 증가되기 전의 값 *t 를 먼저 *s 에 복사하고, // t와 s 를 증가시킨다. while( *s++ = *t++ ) ; while( *s = *t ) { s++; t++; } 위의 두 문장은 동일한 내용이다.

문자열 함수 strcmp (std library) 문자열의 비교는 각 문자열의 첫 글자부터 시작한다. 두 문자가 같으면 다음 문자로 진행하다가 다른 문자가 나타나면 문자값의 차이로부터 크거나 작은 가를 판단한다. 끝까지 문자가 서로 같으면 0을 리턴한다. ■ 표준 라이브러리 함수 strcmp /* strcmp : return < 0 if s<t, 0 if s==t, >0 if s>t */ int strcmp(char *s,char *t) { for( ; *s == *t; s++, t++) // 포인터 s,t를 이용 if( *s == '\0' ) return 0; return *s - *t ; } strcmp(“abc”, “abx”) 는 음의 정수 strcmp(“abc”, “abc”) 는 0 strcmp(“abc”, “aba”) 는 양의 정수

문자열 함수 strcat (std library) /* strcat : concatenate t to end of s; s must be big enough*/ void strcat(char *s,char *t) { s += strlen(s); while( *s++ = *t++ ) ; // 포인터 s,t를 이용 } char s[100] = “abc”; strcat( s, “xyz” ) ; printf( “%s\n”, s ); abcxyz

문자열 함수 atoi (std library) 문자열 “365”를 정수 365로 변환하려면 atoi(“365”) 와 같이 표준 함수 atoi 를 이용한다. 단, #include <stdlib.h> 문장을 포함해야 한다. ■ 표준 라이브러리 함수 atoi /* atoi : convert s to integer */ int atoi(char *str) { char *p = str; int n = 0,sign; while( *p == ' ' ) { ++p; } // skip space sign = (*p == '-') ? -1 : 1 ; if( *p == '+' || *p == '-' ) ++p; // skip sign while( *p ) { n = 10*n + (*p - '0'); ++p; } return sign*n; }

문자열 함수 atof (std library) 문자열 “-3.14159”를 실수 -3.14159로 변환하려면 atof(“-3.14159”) 와 같이 표준 함수 atof 를 이용한다. 단, #include <stdlib.h> 문장을 포함해야 한다. ■ 표준 라이브러리 함수 atof /* atof : convert s to double */ double atof(char *p){ double sign,val,power; while( *p == ' ' ) ++p; // skip space sign = (*p == '-') ? -1. : 1. ; // find sign if( *p == '+' || *p == '-' ) ++p; // skip sign for(val = 0.; *p>='0' && *p<='9'; p++) val = 10.*val + (*p - '0'); if( *p == '.' ) p++; for(power = 1.; *p>='0' && *p<='9'; p++) { // for x < 1 val = 10.*val + (*p - '0'); power *= 10.; } return sign*val/power;

★ ★ ★ ★ ★ ★ 문자열 함수 strrev \0 p ++p --q q ■ 사용자 함수 strrev /* strrev : reverse string str in place */ void strrev(char *str) { char *p = str, *q, c; q = p + strlen(p) -1; // last character, next is ‘\0’ while( p < q ) { c = *p; *p = *q; *q = c; // swap *p and *q ++p; --q; // forward and backward } p ++p --q q ★ ★ ★ ★ ★ ★ \0

문자열 함수 itoa 정수(-365)를 문자열(“-365”)로 변환하는 것은 먼저 1의 자리부터 시작하여 마지막 자리까지 “563-”와 같이 역순으로 만들고, 문자열을 뒤집는 방법을 사용한다. ■ 사용자 함수 itoa /* itoa : convert n to characters in s */ void itoa(int n,char *p) { int sign = n; char *str = p; if( n < 0 ) n = -n; // make positive do { *p = n % 10 + '0'; p++; // get next digit } while( (n/=10) > 0 ); // delete digit if( sign < 0 ) { *p = '-'; p++; } *p = '\0'; strrev(str); }

문자열 함수 strtrim 문자열에 마지막에 “공백, 탭, 줄바꿈” 등의 문자가 오지 않도록 잘라내는 함수를 작성해보자 /* strtrim : remove trailing blanks, tabs, newlines */ int strtrim(char *str) { char *p; for(p = str+strlen(str)-1; p >= str; p--) if( *p != ' ' && *p != '\t' && *p != '\n' ) break; *(++p) = '\0'; return p-str; // string length }