새싹교실/2018/C알/4월2일 (rev. 1.9)
- 포인터(pointer)
- 포인터 타입, 다중 포인터, 포인터 연산, void*
- pointer as parameter
- 배열 타입(recall)
- 배열과 포인터의 관계
- pointer to arrays, array of pointers
- 프로그램 인자(argument) : int argc, char *argv[]
- 동적 메모리 할당(dynamic allocation)
- 프로세스 구조
- void* malloc(size_t)
- void free(void*)
- calloc, realloc
- 문자열
- C에서의 문자열 : null-terminated string
- string.h
- strlen, strcmp, strchr, strstr, strcpy, strcat, strtok
- sscanf, sprintf
- 함수 포인터
- void qsort(void*, void*, size_t, int(*)(void*, void*))
- 실습
- simpleformatter : 간단한 문자열 처리
simpleformatter <option> <string>
<option>
:
-r : 문자열 뒤집기
-u : 소문자를 대문자로
-l : 대문자를 소문자로
-a : 알파벳만 남기기
-n : 숫자만 남기기
- 인자가 없을 경우 : 사용자 입력을 받아 처리
- '-'가 있는 경우와 없는 경우 모두 처리해야함
- 옵션만 있으면, 문자열만 입력 받을것
- 과제 : 오늘의 실습을 python으로 구현 (3 추천)
- 과제_승진
import sys
import re
try :
option = sys.argv[1]
s_data = str(sys.argv[2])
except :
option = input()
s_data = input()
if option == '-r' :
print(s_data[::-1])
elif option == '-u' :
print(s_data.upper())
elif option == '-l' :
print(s_data.lower())
elif option == '-a' :
print("".join(re.findall(r'^|[a-zA-Z]', s_data)))
elif option == '-n' :
print("".join(re.findall('\d+', s_data)))
- 과제_창성
#!/usr/bin/env python3
import sys, re
def switch(x):
return {"-r": string[::-1],
"-u": string.upper(),
"-l": string.lower(),
"-a": re.sub('[0-9]','',string),
"-n": re.sub('[^0-9]','',string)}
if(len(sys.argv) == 3):
option = sys.argv[1]
string = sys.argv[2]
elif(len(sys.argv) == 2):
option = sys.argv[1]
string = input()
else:
option, string = input().split()
print(switch(option)[option])