개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.

Slides:



Advertisements
Similar presentations
National University 1 / 17 컴퓨터 개론 및 실습 강의 6.
Advertisements

2007 1학기 12 배열.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
쉽게 풀어쓴 C언어 Express 제12장 문자와 문자열 C Express.
배열(Array) 선린인터넷고등학교 정보통신과 유 순 옥.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
-Part3- 제3장 콘솔 입출력과 파일 입출력.
프로그래밍실습 제 18 강.
쉽게 풀어쓴 C언어 Express 제12장 문자와 문자열 C Express Slide 1 (of 28)
제1장 코드와라이브러리 Page 1 ~ 30 ■■■■■ ■ ■.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
C 10장. 함수의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
C언어: 배열 (Arrays).
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
7. while 문의 흐름 제어.
10장 메모리 관리.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
21장. 문자와 문자열 처리 함수.
9장 파일 입출력.
10장 포인터와 문자열 포인터 기본 배열과 포인터 매개변수 전달방법 포인터와 문자열.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express.
표준 출력 함수 printf 출력 데이터 서식화(formatting) 표준 입력 함수 scanf 입력 데이터 서식화
Part 04 입출력과 전처리 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
Chapter 11 Strings.
C언어 프로그래밍의 이해 Ch14. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
2019년 2월 24일 오후 4시 59분 제2장 표준 입출력 함수
Chapter 10 Strings and Pointers
자전거를 배우려면 안장에 올라가 페달을 밟아라.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
제어문 & 반복문 C스터디 2주차.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
문자열과 배열 문자열 입출력 문자열 처리 함수 문자 처리 함수 문자열의 배열
조 병 규 Software Quality Lab. 한국교통대학교
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
-Part2- 제1장 1차원 배열이란 무엇인가.
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
C언어 (8) 정명희.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
1학기 정리 지난 학기에 배운 내용을 복습해 본다..
컴퓨터 프로그래밍 기초 #13 : 문자열 Seong-Yun Choi
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
어서와 C언어는 처음이지 제23장.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
printf("Global Korea\n");
실습과제 1번 배열 크기 : 8 문자열 길이 : 7 // MBCS 예제: 출력 결과 이해하기
C 프로그래밍은 매우 도전적인 작업이다. 도전의 이면에 철저한 준비와 체계적인 노력
Chapter 09. 배열.
어서와 C언어는 처음이지 제22장.
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
배열, 포인터, 함수 Review & 과제 1, 2.
배열.
11장. 1차원 배열.
Presentation transcript:

개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay

이번 장에서 학습할 내용 문자 표현 방법 문자열 표현 방법 문자열이란 무엇인가? 문자열의 입출력 문자처리 라이브러리 함수 인간은 문자를 사용하여 정보를 표현하므로 문자열은 프로그램에서 중요한 위치를 차지하고 있다. 이번 장에서는 C에서의 문자열 처리 방법에 대하여 자세히 살펴볼 것이다. 문자 표현 방법 문자열 표현 방법 문자열이란 무엇인가? 문자열의 입출력 문자처리 라이브러리 함수 표준입출력 라이브러리 함수

이번 장에서 만들 프로그램

문자의 중요성 문자열(string)은 “Hello”와 같이 문자들의 모임이다. "A" "Hello" "Mr. Hong"

문자열 표현 방법 char str[6] = "Hello";

문자표현방법 컴퓨터에서는 각각의 문자에 숫자코드를 붙여서 표시한다. 아스키코드(ASCII code): 표준적인 8비트 문자코드 0에서 127까지의 숫자를 이용하여 문자표현 유니코드(unicode): 표준적인 16비트 문자코드 전세계의 모든 문자를 일관되게 표현하고 다룰 수 있도록 설계

NULL 문자 문자열의 끝은 반드시 NULL 문자(null character)라는 특수한 값으 로 끝나야 한다. char str[6] = "Hello";

문자열 배열의 초기화 char str[6] = { 'H', 'e', 'l', 'l', 'o', '\0' };

예제 #1 #include <stdio.h> int main(void) { char str1[6] = "Seoul"; char str2[3] = { 'i', 's', '\0' }; char str3[ ] = "the capital city of Korea."; printf("%s %s %s\n", str1, str2, str3); return 0; }

예제 #2 #include <stdio.h> int main(void) { char str[] = "komputer"; printf("%s\n", str); str[0] = 'c'; return 0; }

예제 #3 #include <stdio.h> int main(void) { char str[] = "A barking dog never bites"; int i = 0; while (str[i] != 0) i++; printf("문자열 %s의 길이는 %d입니다.\n", str, i); return 0; }

문자 입출력

예제 #include <stdio.h> int main(void) { int ch; // 정수형에 주의 ch = getchar(); // 첫 번째 문자를 입력받는다. putchar(ch); // 문자를 출력한다. return 0; }

예제 #include <stdio.h> int main(void) { int ch; // 정수형에 주의 ch = getch(); // 첫 번째 문자를 입력받는다. putch(ch); // 문자를 출력한다. return 0; }

Lab: 도형 크기 변경 화면에 사각형이 그려져 있고 사용자가 ‘b’를 누르면 사각형의 크기 가 점점 커진다. 사용자가 ‘s’를 누르면 사각형의 크기가 작아진다. ‘q’를 누르면 프로그램이 종료되는 프로그램을 작성해보자.

Sol: #include <windows.h> #include <stdio.h> int main(void) { int ch; // 정수형에 주의 int width=200, height=200; HDC hdc = GetWindowDC(GetForegroundWindow()); while (1) { Rectangle(hdc, 100, 100, width, height); // 사각형을 그린다. ch = getch(); // 문자를 입력받는다. Rectangle(hdc, 0, 0, 800, 600); // 화면을 지운다. if (ch == 'b') { width += 10; height += 10; }

Sol: else if (ch == 's') { width -= 10; height -= 10; } else if (ch == 'q') { return 0;

문자열 입출력 라이브러리 함수 프로그램 …Hello World!... 입출력 함수 설명 int scanf("%s", s) int printf("%s", s) 배열 s[]에 저장되어 있는 문자열을 출력한다. char *gets_s(char *s, int length) 한 줄의 문자열을 읽어서 문자 배열 s[]에 저장한다. int puts(const char *s) 배열 s[]에 저장되어 있는 한 줄의 문자열을 출력한다. 프로그램 …Hello World!...

gets_s()와 puts() 문자열 입출력 표준 입력으로부터 엔터키가 나올 때까지 한 줄의 라인을 입력 문자열에 줄바꿈 문자('\n')는 포함되지 않으며 대신에 자동으로 NULL 문자('\0')를 추가한다. 입력받은 문자열은 buffer가 가리키는 주소에 저장된다.

gets()와 puts() 문자열 입출력 puts() str이 가리키는 문자열을 받아서 화면에 출력 NULL 문자('\0')는 줄바꿈 문자('\n')로 변경 char *menu = "파일열기: open, 파일닫기: close"; puts(str);

예제 #1 #include <stdio.h> int main(void) { char name[100]; char address[100]; printf("이름이 어떻게 되시나요? "); scanf("%s", name); printf("어디 사시나요? "); scanf("%s", address); printf("안녕하세요, %s에 사는 %s씨.\n", address, name); return 0; }

예제 #2 #include <stdio.h> int main(void) { char name[100]; char address[100]; printf("이름이 어떻게 되시나요? "); gets_s(name, 99); printf("어디 사시나요? "); gets_s(address, 99); printf("안녕하세요, %s에 사는 %s씨.\n", address, name); return 0; }

중간 점검 한줄의 텍스트를 입력받는 문장을 작성하라. 사용자로부터 하나의 단어를 입력받는 문장을 작성하라.

문자열 처리 라이브러리

문자열 길이: strlen()

예제 #include <stdio.h> #include <string.h> int main(void) { char s[] = "abcdefgh"; int len = strlen(s); printf("문자열 %s의 길이=%d \n", s, len); return 0; }

문자열 복사: strcpy() #include <stdio.h> #include <string.h> int main(void) { char src[] = "Hello"; char dst[6]; strcpy(dst, src); printf("복사된 문자열 = %s \n", dst); return 0; }

문자열 복사: strcpy()

문자열 연결 #include <stdio.h> #include <string.h> int main(void) { char s[11] = "Hello"; strcat(s, "World"); // s에 문자열 “World"를 붙인다. printf("%s \n", s); return 0; }

문자열 연결

문자열 비교 int strcmp( const char *s1, const char *s2 ); 반환값 s1과 s2의 관계 <0 s1이 s2보다 앞에 있다. s1이 s2와 같다. >0 s1이 s2보다 뒤에 있다.

예제 사용자로부터 문자열 2개를 받아서 비교하는 프로그램을 작성해보 자.

예제 #include <string.h> #include <stdio.h> int main(void) { char s1[80]; // 첫 번째 단어를 저장할 문자배열 char s2[80]; // 두 번째 단어를 저장할 문자배열 int result; printf("첫번째 단어를 입력하시오:"); scanf("%s", s1); printf("두번째 단어를 입력하시오:"); scanf("%s", s2); result = strcmp(s1, s2); if (result < 0) printf("%s가 %s보다 앞에 있습니다.\n", s1, s2); else if (result == 0) printf("%s가 %s와 같습니다.\n", s1, s2); else printf("%s가 %s보다 뒤에 있습니다.\n", s1, s2); return 0; }

문자열을 수치로 변환 #include <stdio.h> #include <stdlib.h> int main(void) { int i; double d; i = atoi("100"); printf("%d \n", i); d = atof("36.5"); printf("%f \n", d); return 0; }

문자열과 포인터 아래의 2 문장은 어떻게 다를까? char s[] = "HelloWorld"; // ① char *p = "HelloWorld"; // ②

예제 #include <stdio.h> int main(void) { char s[] = "HelloWorld"; char *p = "HelloWorld"; s[0] = 'h'; // 변경 가능하다. // p[0] = 'h'; // 이 문장을 실행하면 프로그램의 작동이 중지된다. printf("포인터가 가리키는 문자열 = %s \n", p); p = "Goodbye"; // 이것은 가능하다. 큰 장점이다. return 0; }

Lab: 좋아하는 과일을 맞추는 퀴즈 자신이 좋아하는 과일을 퀴즈로 내고 사용자가 맞출 때까지 되풀이 하는 프로그램을 작성해보자.

Sol: #include <stdio.h> #include <string.h> int main(void) { char key[] = "사과"; char buffer[80]; do { printf("내기 제일 좋아하는 과일은 무엇일까요? "); scanf("%s", buffer); } while (strcmp(key, buffer) != 0); printf("맞았습니다!"); return 0; }

Lab: 행맨 빈칸으로 구성된 문자열이 주어지고 사용자는 문자열에 들어갈 글 자들을 하나씩 추측해서 맞추는 게임

Sol: #include <stdio.h> int main(void) { char solution[100] = "meet at midnight"; char answer[100] = "____ __ ________"; char ch; int i; while (1) { printf("\n문자열을 입력하시오: %s \n", answer); printf("글자를 추측하시오: "); ch = getch(); for (i = 0; solution[i] != NULL; i++) { if (solution[i] == ch) answer[i] = ch; } if (strcmp(solution, answer) == 0) break; return 0;

도전문제 여러 개의 문자열 중에서, 하나를 정답으로 선택하도록 위의 프로그 램을 업그레이드하여 보자.

Lab: 단어 애나그램 게임 영어 단어를 이루는 글자들이 뒤죽박죽 섞인 것을 받아서 순서대로 재배치하는 게임을 애나그램 게임이라고 한다.

Sol: #include <stdio.h> #define SOL "apple" int main(void) { char s[100] = SOL; char ans[100]; int i, len; len = strlen(s); for (i = 0; i<len; i++) { int pos1 = rand() % len; int pos2 = rand() % len; char tmp = s[pos1]; s[pos1] = s[pos2]; s[pos2] = tmp; }

Sol: do { printf("%s의 원래단어를 맞춰보세요: ", s); scanf("%s", ans); } while (strcmp(ans, SOL) != 0); printf("축하합니다. \n"); return 0; }

문자열의 배열 char s[3][6] = { "init", "open", "close" };

예제 다음과 같은 메뉴를 2차원 문자 배열에 저장하고 화면에 출력하는 프로그램을 작성해보자.

예제 #include <stdio.h> int main(void) { int i; char menu[5][10] = { "init", "open", "close", "read", "write" }; for (i = 0; i < 5; i++) printf("%d 번째 메뉴: %s \n", i, menu[i]); return 0; }

Lab: 한영 사전의 구현 3차원 문자 배열을 이용하여 간단한 한영 사전을 구현하여 보자. 영 어 단어가 dic[i][0]에 저장된다. 한글 설명은 dic[i][1]에 저장된 다.

Sol: #include <stdio.h> #include <string.h> #define WORDS 5 int main(void) { int i, index; char dic[WORDS][2][30] = { { "book", "책" }, { "boy", "소년" }, { "computer", "컴퓨터" }, { "language", "언어" }, { "rain", "비" }, }; char word[30];

Sol: printf("단어를 입력하시오:"); scanf("%s", word); index = 0; for (i = 0; i < WORDS; i++) { if (strcmp(dic[index][0], word) == 0) printf("%s: %s\n", word, dic[index][1]); return 0; } index++; printf("사전에서 발견되지 않았습니다.\n");

Lab: 문자열의 정렬 문자열들을 알파벳 순으로 정렬할 수 있을까?

Sol: #include <stdio.h> #define SIZE 6 int main(void) { int i, k; char fruits[SIZE][20] = { "pineapple", "banana", "apple", "tomato", "pear", "avocado" };

Sol: for (k = 0; k < SIZE; k++) { for (i = 0; i < SIZE - 1; i++) { if (strcmp(fruits[i], fruits[i + 1]) > 0) { char tmp[20]; strcpy(tmp, fruits[i]); strcpy(fruits[i], fruits[i + 1]); strcpy(fruits[i + 1], tmp); } for (k = 0; k < SIZE; k++) printf("%s \n", fruits[k]); return 0;

Q & A