Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- JavaScript
- dfs
- DP
- Algorithm
- sorting
- String
- 생활코딩
- 정수론
- 따배씨
- 종만북
- server
- BFS
- BASIC
- Algospot
- C
- greedy
- graph
- Cleancode
- web
- 따라하면서 배우는 C언어
- udemy
- 따라하며 배우는 C언어
- C언어
- Python
- Math
- programmers
- BOJ
- 백준
- 인프런
- php
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 4.26 함수 포인터의 배열 연습문제 본문
따배씨 - 따라하며 배우는 C언어
14강 구조체_2
4.26 함수 포인터의 배열 연습문제
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdbool.h>
void update_string(char* str, int(*pf)(int));
void ToUpper(char* str);
void ToLower(char* str);
void Transpose(char* str);
int main()
{
char options[] = {'u', 'l', 't'};
int n = sizeof(options) / sizeof(char);
typedef void (*FUNC_TYPE)(char*);
FUNC_TYPE operations[] = {ToUpper, ToLower, Transpose};
printf("Enter a string\n>> ");
char input[100];
while (scanf("%[^\n]%*c", input) != 1)
printf("Please try again.\n>> ");
while (true)
{
printf("Choose an option:\n");
printf("u) to Upper\n");
printf("l) to Lower\n");
printf("t) to Transpose\n");
char c;
while (scanf("%c%*[^\n]%*c", &c) != 1)
printf("Please try again.\n>> ");
bool found = false;
for (int i = 0; i < n; i++)
{
if (options[i] == c)
{
(*(operations[i]))(input);
found = true;
break;
}
}
if (found)
break;
else
printf("Wrong input, try again\n");
}
printf("%s\n", input);
return 0;
}
void update_string(char* str, int(*pf)(int))
{
while (*str)
{
*str = (*pf)(*str);
str++;
}
}
void ToUpper(char* str)
{
update_string(str, toupper);
}
void ToLower(char* str)
{
update_string(str, tolower);
}
void Transpose(char* str)
{
while (*str)
{
if (islower(*str))
* str = toupper(*str);
else if (isupper(*str))
*str = tolower(*str);
str++;
}
}
char options[] = {'u', 'l', 't'};
int n = sizeof(options) / sizeof(char);
typedef void (*FUNC_TYPE)(char*);
FUNC_TYPE operations[] = {ToUpper, ToLower, Transpose};
//////////////////
for (int i = 0; i < n; i++)
{
if (options[i] == c)
{
(*(operations[i]))(input);
found = true;
break;
}
}
- 함수 포인터의 배열을 활용하여, 메뉴 선택 구현
- 확장성 있는 코드 패턴
scanf("%c%*[^\n]%*c", &c)
- % 뒤의 * 은 입력받고 무시한다는 의미
- '[]' 안의 문자가 아닌 문자를 만났을때 까지 입력 받음
- '[^]' 안의 문자를 만났을때 까지 입력 받음
- -> char 하나를 입력 받음 & \n 을 만날때까지 입력 받지만 무시 & 그뒤 입력 무시
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 15.2 이진수를 십진수로 바꾸기 연습문제 (0) | 2021.07.20 |
---|---|
[따배씨] 15.1 비트단위 논리 연산자 (0) | 2021.07.20 |
[따배씨] 14.25 qsort() 함수 포인터 연습문제 (0) | 2021.07.14 |
[따배씨] 14.24 복잡한 선언 Declaration 을 해석하는 요령 (0) | 2021.07.13 |
[따배씨] 14.23 자료형에게 별명을 붙여주는 typedef (0) | 2021.07.13 |
Comments