-
연습문제 풀이
문제 1 /* * 2022-01-23 * 연습문제 1 * 프로그램을 실행하면 $와 한 칸의 공백문자를 출력하고 사용자의 입력을 기다린다. * 문장을 입력하면 문장 그대로와 길이를 출력한다. */ #include <stdio.h> #include <string.h> #define BUFFER_SIZE 40 int read_line(char str[], int n); int main_1(void) { char buffer[BUFFER_SIZE]; while (1) { printf("$ "); int len = read_line(buffer, BUFFER_SIZE); //fgets(buffer, BUFFER_SIZE, stdin); //buffer[strlen(buffer) - 1] = '\0'; //buffer의 마지막 문자가 줄바꿈 문자가 되지 않도록 하기 위함 printf("%s : %d\n", buffer, len); } return 0; } int read_line(char str[], int n) { int ch, i = 0; while ((ch = getchar()) != '\n') //getchar의 리턴 타입은 int임 -> ch의 타입을 int로 함 if (i < n) str[i++] = ch; str[i] = '\0'; return i; }
문제 2 /* * 2022-01-23 * 연습문제 2 * 프로그램을 실행하면 $와 한 칸의 공백문자를 출력하고 사용자의 입력을 기다린다. * 문장을 입력하면 문장 그대로와 길이를 출력한다. * 문장의 앞과 뒤에 붙은 공백문자들은 제거하고, 단어 사이에 두 개 이상의 연속된 공백문자들은 하나의 공백문자로 대체한다. */ #include <stdio.h> #include <ctype.h> //white space 문자인지 검사하는 isspace함수 제공 #define BUFFER_SIZE 80 int read_line_with_compression(char compressed[], int limit); int main() { char line[BUFFER_SIZE]; while (1) { printf("$ "); int len = read_line_with_compression(line, BUFFER_SIZE); printf("%s:%d\n", line, len); } return 0; } int read_line_with_compression(char compressed[], int limit) { int ch, i = 0; while ((ch = getchar()) != '\n') { if (i < limit - 1 && (!isspace(ch) || i > 0 && !isspace(compressed[i - 1]))) compressed[i++] = ch; } if (i > 0 && isspace(compressed[i - 1])) i--; compressed[i] = '\0'; return i; }