문자열 연습문제
위와 같은 결과를 만드는게 목표
#define BUFFER_SIZE 20
int main(void) {
char buffer[BUFFER_SIZE];
while(1) {
printf("$ ");
//scanf(buffer); scanf는 공백 문자 기준으로 끊기 때문에 공백을 포함한 문장에 쓸 수 없음
//gets(buffer); gets는buffer에 담을 수 있는 길이 상관없이 담는 문제가 있다.
//fgets(buffer, BUFFER_SIZE, stdin); BUFFER_SIZE만큼 읽는다. 단, \n, buffer size 초과시 원하는 대로 반영이 제대
로 안됨
// buffer[strlen(buffer)-1] = '\0'; fgets를 쓸때 buffer[strlen(buffer)-1] 는 \n이라 개행 안되도록 \0로 변경
k = read_line(buffer, BUFFER_SIZE);
printf("%s:%d\n", buffer, k);
}
}
다양한 입력함수가 있고 각자는 약간의 차이가 있다. 사용자가 알맞게 쓰고자하는 경우 변경하는 용도에 맞는 함수를 만들어 쓰기도 한다.
ex)
int read_line( char str[], int limit) {
int ch, i =0;
while((ch = getchar()) != '\n')
if(i<limit)
str[i++] = ch;
str[i] = '\0';
return i;
}
불필요한 공백을 제거하는 버젼
#define BUFFER_SIZE =80
int main() {
char line[BUFFER_SIZE ];
while(1) {
printf("$ ");
int length = read_line_with_compression(line, BUFFER_SIZE);
printf("%s:%d\n", line, length);
}
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]) ) ) { //isspace를 쓰면 공백 및 탭 문자도 포함된다.
compressed[i++] = ch;
}
if (i > 0 && ! isspace(compressed[i-1])) // 마지막 문자가 공백일때를 감안한 조건문
i--;
compressed[i] = '\0';
return i;
}
'CS > 자료구조' 카테고리의 다른 글
[인프런|6,7,8강] C로 배우는 자료구조 | 전화번호부 v3.0 (0) | 2020.11.15 |
---|---|
[인프런|5강] C로 배우는 자료구조 | 전화번호부 v2.0 (0) | 2020.11.14 |
[인프런|4강] C로 배우는 자료구조 | 전화번호부 v1.0 (0) | 2020.11.13 |
[인프런|2강] C로 배우는 자료구조 | 문자열 (0) | 2020.11.10 |
[인프런|1강] C로 배우는 자료구조 | C언어 기초 문법 리뷰 (0) | 2020.11.09 |