#include #define type int #define string_size 100 typedef struct list { type size; type * array; }list; int num; // 문자형 배열의 인덱스로 사용되는 변수 int idx; // value리스트 인덱스로 사용되는 변수 char get_symbol(char* s,int Case) { switch (Case) { case -1: // 이전 문자 리턴 (case 0이 이루어진 후에 성립) return s[num - 2]; case 0: // 현재 문자 리턴 return s[num++]; case 1: // 다음 문자 리턴 (case 0이 이루어진 후에 성립) return s[num]; } } void value_processing(char*s, list* value) { char tmpm,tmp, tmpp; // tmp:현재 가져온 문자, tmpm: 이전 문자, tmpp: 다음 문자 int negative = 0; // 음수인지 확인하는 변수 while ((tmp = get_symbol(s, 0)) != '/') { tmpp = get_symbol(s, 1); // 다음 문자 tmpm = get_symbol(s, -1); // 이전 문자 // 정수일 때 처리 if ((tmp >= '0' && tmp <= '9') || (tmp == '-' && tmpp >= '0' && tmpp <= '9')) { // 이전이 -가 아니고 문자거나 쓰레기 값이면 리스트 size증가 if ((tmpm<'0' || tmpm>'9') && tmpm != '-') { value->array = (type*)realloc(value->array, sizeof(type)*(++value->size)); value->array[++idx] = 0; negative = 0; } // 음수 체크 if (tmp == '-') { negative = 1; // 음수가 연속으로 왔는지 체크 if (tmpm >= '0' && tmpm <= '9') { value->array = (type*) realloc(value->array, sizeof(type)*(++value->size)); value->array[++idx] = 0; } continue; } // 음수일 때 처리 if (negative == 1) value->array[idx] = 10 * value->array[idx] - (tmp - '0'); // 양수나 0일 때 처리 else value->array[idx] = 10 * value->array[idx] + (tmp - '0'); } // 문자일 때 처리 else continue; } } list* store(char *s,list* value) { // 문자형 배열 인덱스 초기화 num = 0; // 문자 끝에 오는 널 문자 -> '/'로 바꾸기 s[strlen(s)] = '/'; // 문자열에서 수만 빼서 저장 value_processing(s, value); // 수정된 리스트 구조체 변수(포인터) 리턴 return value; } list* init(list* value) { // 인덱스 변수 초기화 num = 0; idx = -1; // 리스트 생성 및 초기화 value = (list*)malloc(sizeof(list)); value->size = 0; value->array = (type*)malloc(sizeof(type)); value->array[0] = 0; return value; } void display(list* value) { // 리스트 요소와 사이즈 출력 for (int i = 0; i < value->size; i++) printf("%d ", value->array[i]); printf("(size:%ld)\n", value->size); } int main(void) { char string[string_size] = ""; list* value = NULL; // 리스트 구조체 변수 생성 while (1) { value = init(value); // 리스트 구성 // 문자열 입력 printf("□ 문자열 입력: "); gets(string); // 문자열 -> 수 배열에 저장 store(string, value); // 수 배열 출력 printf("\n■ 리스트 출력: "); display(value); printf("-----------------------------------\n"); // 문자형 배열 초기화 for (int i = 0; i < string_size; i++) string[i] = 0; // 리스트 제거 free(value); } }