Slide 1

Similar documents
C++ Programming

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - [2009] 02.pptx

쉽게 풀어쓴 C 프로그래밍

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

Slide 1

설계란 무엇인가?

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

쉽게 풀어쓴 C 프로그래밍

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - chap06-2pointer.ppt

Slide 1

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Presentation

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - chap06-8.ppt

설계란 무엇인가?

C프로-3장c03逞풚

슬라이드 1

Microsoft PowerPoint - chap06-8 [호환 모드]

슬라이드 1

KNK_C_05_Pointers_Arrays_structures_summary_v02

Slide 1

Microsoft PowerPoint - chap07.ppt [호환 모드]

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

쉽게 풀어쓴 C 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

설계란 무엇인가?

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

Slide 1

BMP 파일 처리

Microsoft PowerPoint - 제9강 문자열

Slide 1

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

Microsoft PowerPoint - chap06-4 [호환 모드]

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

02장.배열과 클래스

Microsoft PowerPoint - C프로그래밍-chap15.ppt [호환 모드]

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Microsoft PowerPoint 웹 연동 기술.pptx

C 프로그램의 기본

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

금오공대 컴퓨터공학전공 강의자료

C++ Programming

금오공대 컴퓨터공학전공 강의자료

Slide 1

Microsoft PowerPoint - chap11.ppt [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chap12-OOP.ppt

Slide 1

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Microsoft PowerPoint - 05장(함수) [호환 모드]

슬라이드 1

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

PowerPoint Presentation

Microsoft PowerPoint - additional06.ppt [호환 모드]

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

C++ Programming

설계란 무엇인가?

Microsoft PowerPoint - 10장 문자열 pptx

Microsoft PowerPoint - chap06.ppt

PowerPoint 프레젠테이션

윤성우의 열혈 TCP/IP 소켓 프로그래밍

컴파일러

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

슬라이드 1

C++ Programming

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

11장 포인터

歯7장.PDF

JAVA PROGRAMMING 실습 02. 표준 입출력

chap7.PDF

080629_CFP °ø°³¿ë.hwp

Microsoft PowerPoint - chap11-포인터의활용.pptx

설계란 무엇인가?

PowerPoint 프레젠테이션

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

JAVA PROGRAMMING 실습 02. 표준 입출력

슬라이드 1

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

Microsoft PowerPoint - Java7.pptx

03 상수, 변수, 자료형

PowerPoint Template

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

PowerPoint Presentation

Transcription:

SeoulTech 2011-2 nd 프로그래밍입문 (2) Chapter 9. 스트링 박종혁교수 (http://www.parkjonghyuk.net) Tel: 970-6702 Email: jhpark1@snut.ac.kr

Learning Objectives 스트링을위한배열형식 C- 스트링 문자조작도구 문자 I/O get, put 멤버함수 putback, peek, ignore 표준스트링클래스 스트링프로세스 9-2

개요 두개의스트링형식 : C-스트링 문자형배열 배열의끝을마킹 null, "\0" C언어에서기인된전통적인방법 스트링클래스 템플릿사용 9-3

C- 스트링 문자형배열 인덱스변수당하나의문자 extra character: "\0" 널문자 문자열의끝을표시 : 종료표시자 (End Marker) C 언어부터사용해오던방식 Hello : C- 스트링으로저장된문자상수 9-4

C- 스트링변수 문자형배열 : char s[10]; 9 개문자를위한 C- 스트링변수선언 널문자추가됨 일반적으로부분적으로채워진배열 최대스트링크기를여유있게선언 스트링의끝은널문자로마킹 일반배열과다른점 : 반드시널문자를포함해야함 9-5

C- 스트링저장 char s[10]; "Hi Mom!" 의저장 : 9-6

C- 스트링초기화 C- 스트링초기화 : char mymessage[20] = "Hi there."; 모든배열요소를채울필요없음 배열의마지막에 "\0" 위치 배열의크기를명시하지않을경우 : char shortstring[] = "abc"; 자동으로문자열보다하나큰크기로설정됨 다음의예와다름 : char shortstring*+ =, a, b, c -; 9-7

C- 스트링은배열 C- 스트링인덱스 인덱스변수로접근이가능 : char ourstring[5] = "Hi"; ourstring[0] "H" ourstring[1] "i" ourstring[2] "\0" ourstring[3] unknown ourstring[4] unknown 9-8

C- 스트링인덱스조작 인덱스변수단위의조작이가능 char happystring[7] = "DoBeDo"; happystring[6] = "Z"; 주의! 여기서, \0 (null) 이 Z 로대치됨 널문자가유지되지못하면더이상 C- 스트링으로동작하지않음! 예상치못한결과! 9-9

라이브러리 C- 스트링선언 C++ 라이브러리가필요없음 표준 C++ 에 Built in 되어있음 조작 <cstring> 라이브러리필요 #include <cstring> 전역네임스페이스에정의되어있다 - 별도의 using 문장이필요없다. 9-10

C- 스트링의할당 (=) 과비교 (==) C- 스트링은다른변수와다름 할당과비교연산이불가 : char astring[10]; astring = "Hello"; // ILLEGAL! C- 스트링선언할때 = 사용가능! : 변수의초기화구문 할당을위해라이브러리함수를사용해야함 : strcpy(astring, "Hello"); <cstring> 의라이브러리함수 astring 에 "Hello 가할당 크기체크하지않음! 다른배열과마찬가지로프로그래머의몫! strcpy 함수의세번째인자로복사되는문자열의크기지정. 9-11

C- 스트링의비교 == 연산자사용불가 char astring[10] = "Hello"; char anotherstring[10] = "Goodbye"; astring == anotherstring; // NOT allowed! 라이브러리함수를사용해야함 : if (strcmp(astring, anotherstring)) cout << "Strings NOT same."; //true else cout << "Strings are same."; //false 9-12

<cstring> 라이브러리 : 디스플레이 9.1 <cstring> 에서사전정의된 C- 스트링함수 (1/2) Full of string manipulation functions 9-13

<cstring> 라이브러리 : 디스플레이 9.1 <cstring> 에서사전정의된 C- 스트링함수 (2/2) 4-14

C- 스트링함수 : strlen() 스트링의길이를리턴 : char mystring[10] = "dobedo"; cout << strlen(mystring); 문자의수를리턴함 널문자는포함되지않음 결과 6 9-15

C- 스트링함수 : strcat() strcat() 스트링연결 : char stringvar[20] = "The rain"; strcat(stringvar, "in Spain"); 결과 : "The rainin Spain" 주의! 문자열을모두수용할수있는공간이필요! 9-16

C- 스트링인자와매개변수 C- 스트링은배열 따라서, C- 스트링매개변수는배열매개변수와동일 함수에전달된 C- 스트링은함수에서수정이가능! 다른배열과동일하게일반적으로배열크기전달 마지막을찾기위해함수내부에서널문자이용 함수내부에서 C- 스트링매개변수의변경이없다면크기는필요없음 C- 스트링매개변수보호 const 9-17

C- 스트링출력 << 이용 이미사용 : cout << news << " Wow.\n"; 여기서 news 는 C- 스트링변수 가능한이유 << 는이미 C- 스트링을위해오버로딩되어있음! 9-18

>> 이용 이슈가존재 C- 스트링입력 공백문자 delimiter( 구획문자 ) Tab, space, line break Delimiter 에서읽기중단 C- 스트링크기주의 스트링을위해충분한공간을확보해야함! C++ 에서공간에대한경고가없음! 9-19

C- 스트링입력예제 char a[80], b[80]; cout << "Enter input: "; cin >> a >> b; cout << a << b << "END OF OUTPUT\n"; 실행결과 : Enter input: Do be do to you! DobeEND OF OUTPUT C- 스트링 a Do" C- 스트링 b be" 9-20

C- 스트링라인입력 C- 스트링에라인단위의입력이가능 getline() 사용, 사전정의된멤버함수 : char a[80]; cout << "Enter input: "; cin.getline(a, 80); cout << a << "END OF OUTPUT\n"; 실행결과 : Enter input: Do be do to you! Do be do to you!end OF INPUT 9-21

예 : 명령행인자 명령행으로부터실행되는프로그램들 (UNIX shell, DOS 명령프롬프트 ) 은인자를보낼수있다 예 : COPY C:\FOO.TXT D:\FOO2.TXT COPY 라는이름의프로그램을실행하고 2 개의 C- 스트링매개변수를보낸다 : C:\FOO.TXT and D:\FOO2.TXT 제공되는입력에따라 COPY 프로그램을수행한다. 인자들은 C- 스트링의배열로서 main 함수에전달된다 9-22

예 : 명령행인자 main 함수의헤더 int main(int argc, char *argv[]) 인자 argc 는주어진인자의개수를명시하는정수이며, 기본적으로프로그램의이름을하나의수로간주하기때문에 argc 값은최소한 1 이된다 인자 argv 는 C- 스트링의배열 argv[0] 는프로그램의이름을명시 argv[1] 은첫번째매개변수를명시 argv[2] 는두번째매개변수를명시 9-23

예 : 명령행인자 // Echo back the input arguments int main(int argc, char *argv[]) { for (int i=0; i<argc; i++) { cout << "Argument " << i << " " << argv[i] << endl; } return 0; } 예제실행 > Test Argument 0 Test 명령프롬프트로부터의입력테스트 예제실행 > Test hello world Argument 0 Test Argument 1 hello Argument 2 world 9-24

getline() 멤버함수 명시적인입력크기지정가능 : char shortstring[5]; cout << "Enter input: "; cin.getline(shortstring, 5); cout << shortstring << "END OF OUTPUT\n"; 결과 : Enter input: dobedowap dobeend OF OUTPUT 네개의문자만을읽음 하나는널문자를위한공간! 9-25

문자 I/O 입 / 출력데이터 모두문자로취급 예 ) 숫자 10 은 1 과 0 두개의문자가출력된것 변환은자동으로수행 저수준도구사용 C++ 에서는하드웨어수준의저수준도구의사용이가능 9-26

get() 멤버함수 한번에하나의문자를읽음 cin 객체의멤버함수 : char nextsymbol; cin.get(nextsymbol); 키보드에서입력된문자를 nextsymbol 변수에저장 매개변수는반드시문자형 문자열이아님! 9-27

put() 멤버함수 한번에하나의문자를출력 cout 객체의멤버함수 : 예 : cout.put( a ); 문자 a 를출력 char mystring[10] = "Hello"; cout.put(mystring[1]); 문자 e 를출력 9-28

기타멤버함수 putback() 읽어온문자를되돌림 cin.putback(lastchar); peek() 입력될다음문자를리턴 peekchar = cin.peek(); ignore() 지정된문자의입력생략 cin.ignore(1000, \n ); 최대 1000 개의문자까지 \n 생략 9-29

문자조작함수 : 디스플레이 9.3 <cctype> 일부함수 (1/3) 4-30

문자조작함수 : 디스플레이 9.3 <cctype> 일부함수 (2/3) 4-31

문자조작함수 : 디스플레이 9.3 <cctype> 일부함수 (3/3) 4-32

표준스트링클래스 라이브러리에정의되어있음 : #include <string> using namespace std; 문자열변수와표현 기본형과유사하게취급됨 할당, 비교, 결합이가능 : string s1, s2, s3; s3 = s1 + s2; //Concatenation s3 = "Hello Mom!" //Assignment C-스트링 "Hello Mom!" 은자동으로스트링형으로변환됨! 9-33

디스플레이 9.4 스트링클래스프로그램 4-34

스트링클래스 I/O 다른형과동일함! string s1, s2; cin >> s1; cin >> s2; 입력 : May the hair on your toes grow long and curly! 공백문자이후무시 : s1 "May" s2 "the" 9-35

클래스스트링과 getline() 라인단위입력을위해 : string line; cout << "Enter a line of input: "; getline(cin, line); cout << line << "END OF OUTPUT"; 실행결과 : Enter a line of input: Do be do to you! Do be do to you!end OF INPUT C- 스트링의 getline() 사용과유사 9-36

getline() 함수의다른버전 Delimiter 문자설정 : string line; cout << "Enter input: "; getline(cin, line,? );? 문자까지입력 getline() 은참조를리턴 string s1, s2; getline(cin, s1) >> s2; 결과 : cin >> s2; 9-37

함정 : 혼합입력 cin >> var 과 getline 의혼용에유의 int n; string line; cin >> n; getline(cin, line); 입력 : 42 Hello hitchhiker. 변수 n 은 42 로세팅됨 line 은빈문자열로세팅! cin >> n 은 \n 에서읽기를멈춤, \n 이 getline() 에입력됨! 9-38

스트링클래스를이용한스트링처리 C- 스트링과같은오퍼레이션이가능 향상된버전! 표준스트링클래스의멤버함수는 100 개이상이존재 일부멤버함수 :.length() 스트링변수의길이를리턴.at(i) i 번째문자의참조를리턴 9-39

디스플레이 9.7 표준스트링클래스의 멤버함수 (1/2) 4-40

디스플레이 9.7 표준스트링클래스의 멤버함수 (2/2) 4-41

C- 스트링과스트링객체의변환 자동형변환 C- 스트링 스트링객체 : char acstring[] = "My C-string"; string stringvar; stringvar = acstring; 완벽하게허용되고적절한방법이다! 스트링객체 C- 스트링 acstring = stringvar; 변환이지원되지않음! 명시적인변환방법을사용 : strcpy(acstring, stringvar.c_str()); 9-42

요약 C- 스트링변수는문자배열 널문자 ( \0 ) 추가됨 C- 스트링은배열과동일하게동작 할당, 비교연산수행불가 <cctype> 과 <string> 라이브러리에는유용한문자열조작함수가존재 cin.get() 함수는하나의문자를읽음 getline() 함수는라인단위의입력이가능 스트링클래스는 C- 스트링보다향상되고편리함 9-43

Q&A 4-44