제 10-11 장 문자 및 문자열 함수

Download Report

Transcript 제 10-11 장 문자 및 문자열 함수

제 10 장 문자 입출력 함수
1
목
•
•
•
•
문자 입출력 함수 개요
단일 문자 입출력 함수
문자열 입출력 함수
연습문제
차
문자 입출력 함수
• 처음에는 함수의 부재로 고생하게 되지만 나중에는 그
함수들을 만들게 됨
• 문자 입출력 함수는 크게 단일문자 입출력함수와 문자열
입출력함수로 나뉨
3
문자 입출력 함수의 종류
대분류
소분류
출력 분류
해당 함수
화면 출력
putchar(), printf()
파일 출력
putc(), fputc(), fprintf()
화면 출력
puts(), printf(), fputs()
파일 출력
fputs(), fprintf()
문자 출력함수
출력 함수
문자열 출력함수
화면(키보드) 입력
getchar(), scanf(), fgetc()
문자 입력함수
파일 입력
입력 함수
화면(키보드) 입력
getc(), fgetc(), fscanf()
gets(), scanf(), fgets()
문자열 입력함수
파일 입력
fgets(), fscanf()
4
문자 입출력 함수의 종류
•
출력한다.
– put, print라는 단어가 들어감
– 예) printf(), puts(), putc(), fprintf()
•
입력한다.
– get, scan이라는 단어가 들어감
– 예) getc(), getchar(), scanf(), fscanf()
•
파일에서 입출력을 처리한다.
– 가장 앞 머리에 ‘f’가 들어감
– 여기서의 파일이란 개념은 우리가 일반적으로 알고 있는 파일이 아닌 유닉스의 파일 개념을
따름
– 일반적인 의미에서의 파일이란 하드 디스크에 저장되어 있는 파일을 뜻하지만 유닉스에서의
파일이란 플로피 디스크나 마그네틱 디스크, CD ROM등이 모두 될 수 있음
– 결국 파일에 무언가 쓴다는 것은 하드 디스크 뿐만 아니라 CD ROM에 기록하는 것도 포함됨
– C가 유닉스라는 운영체제를 만들기 위해서 탄생한 만큼 꼭 알아두어야 하는 개념임
– 예) fputc(), fputs(), fgets(), fprintf(), fscanf()
5
문자 입출력 함수의 종류
• 하나의 문자를 입출력
– 가장 끝머리에 c나 char이 들어감
– 예) getc(), getchar(), putc(), putchar()
• 문자열을 처리
– 가장 끝머리에 s가 들어감
– 예) gets(), puts()
6
문자 입출력 함수의 종류
• 사용자로부터 이름을 입력 받고 싶다.
– fgets()를 사용
– gets()나 scanf()를 사용할 수도 있지만 fgets()를 사용하는 것이
좋음
– gets()는 문자열을 다룰 때 절대 사용하지 말아야 할 함수이며
scanf()는 공백이 포함된 문자열을 다룰 때 문제가 발생함
• 사용자로부터 하나의 문자를 입력 받고 싶다.
– (사용자에게 어떤 문제를 제시하고 ‘y’나 ‘n’과 같은 간단한 문자
를 입력 받아 처리하고 싶을 때가 이에 해당)
– getchar()을 사용
– getc()나 fgetc()는 일단 파일에서 입력 받는다고 생각하고 제외
(STDIO를 사용하면 사용자로부터 받을 수 있음)
– scanf()는 너무 무거운 함수이기 때문에 사용을 자제해야 함
7
문자 입출력 함수의 종류
•
파일에서 문자열을 입력 받는다.
– 파일에서 문자열을 입력 받을 때는 두 부류로 나눌 수 있는데 파일의 내
용이 어떤 규칙성을 가지며 행 단위로 배열되어 있다면 fscanf()를 사용
하는 것이 편리하고 특별한 규칙성이 없이 읽어 들이는 것에만 초점이
맞추어져 있다면 fgets()를 사용하는 것이 편리
– 일반적으로는 파일에서 읽어 들일 때에는 fscanf()나 fgets()보다는
fgetc()나 getc()를 많이 사용
– 왜냐하면 파일을 C로 처리할 때는 비트나 바이트 단위로 처리할 때가
많으며 문자열 단위로 읽어 들이는 경우가 많지 않기 때문임
•
화면에 하나의 문자를 출력하고 싶다.
– printf()나 putchar()를 사용
– 일반적으로 하나의 문자라도 printf()를 사용하는 경우가 많은데 하나의
문자를 출력할 때는 꼭 putchar()를 사용하는 것이 좋음. (putchar()이
printf()보다 훨씬 가벼운 함수이며 빠르기 때문)
8
문자 입출력 함수의 종류
• 화면에 문자열을 출력하고 싶다.
– 이때는 두 가지로 분류해 볼 수 있다. 화면에 단순히 출력하는 경
우와 특정한 형식에 맞추어서 출력하는 경우이다. 단순히 문자열
만 출력하려면 puts()를 사용하는 것이 좋은데 특히 puts()는 자
동 개행문자를 포함하기 때문에 좀더 심플하게 출력이 가능함
– 하지만 특정한 형식에 맞추어서 문자열을 출력하려면 puts()는
그 기능을 하지 못하므로 printf()를 사용 (간단한 문자열은 puts()
를 사용하는 것이 좋음. printf()보다 훨씬 가벼움)
• 파일에 문자열을 출력하고 싶다. (저장하고 싶다.)
– 파일에 출력하고 싶은 내용이 특정한 형식을 취하고 있는지 아닌
지에 따라서 다른 함수가 사용되는데 특정한 형식을 취해야 한다
면 fprintf()가 적당하며 단순히 문자열을 파일에 기록하는 것이
라면 fputc()나 putc()를 사용
9
버퍼의 개념
• 예제
(버퍼로 인한 문제점)
#include <stdio.h>
main()
{
char
answer;
while(1)
g e t c h a r ( ) 는 버퍼형 입출력
함수이다. 버퍼형 입출력
함수는 개행문자에 의해서
반 응 하 기 때 문 에 항 상
엔터키를 입력해야 결과를 볼
수 있다.
{
printf(“당신은 남자 입니까 ? (y/n) “);
answer = getchar();
if(answer == ‘y’) puts(“당신은 남자 입니다.”);
else puts(“당신은 여자 입니다.”);
}
}
당신은
당신은
당신은
당신은
남자
남자
여자
남자
입니까 ? (y/n) y
입니다.
입니다.
입니까 ? (y/n) _
10
버퍼의 개념
• 버퍼란?
– 버퍼(buffer)는 ‘완충 물, 쿠션’이라는 개념을 가지고
있음
– 완충이라는 것은 부족한 것에 대한 보완, 보충의 의미
가 있는데 컴퓨터에서는 이 완충이 바로 메모리와 하
드 디스크 간의 속도 차를 완화해 주고 있음
– 컴퓨터에서의 버퍼는 임시 저장 장소를 뜻함
– 임시 저장 장소에 저장되는 내용은 문자나 문자열, 숫
자 등 어느 것이나 올 수 있는데 입출력의 효율을 위
해서 사용함
11
putchar()
• 예제
(단일 문자 출력)
#include <stdio.h>
main()
{
int
i;
for(i = 20;i <= 125;i++)
putchar(i);
}
123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}
#include <stdio.h>
main()
{
int
i;
for(i = 0;i < 26;i++)
putchar(‘a’ + i);
}
abcdefghijklmnopqrstuvwxyz
‘a’ + i는 97 + 0, 97 + 1 … 과 같이
동작한다. 그러므로 97, 98, 99 … 에
대한 아스키 문자가 출력된다.
12
getchar()
• 예제
(단일 문자 입력: 다음의 프로그램에서 문제점은?)
#include <stdio.h>
main()
{
char
c;
while(1)
{
printf(“당신의 성별은 ? (남자 = 1, 여자 = 2) “);
c = getchar();
if(c == ‘1’) puts(“당신은 남자 입니다.”);
else puts(“당신은 여자 입니다.”);
}
}
당신의
당신은
당신의
당신은
당신의
성별은 ? (1, 2) 1
남자 입니다.
성별은 ? (1, 2)
여자 입니다.
성별은 ? (1, 2) _
13
getchar()
• getchar()의 입력형태
49
10
1
enter
1
\n
14
getchar()
• 버퍼 경유 입출력 함수 특성처리
#include <stdio.h>
main()
{
char
c = 0;
while(c != EOF)
{
printf(“당신의 성별은 ? (남자 = 1, 여자 = 2) “);
c = getchar(); fflush(stdin);
if(c == ‘1’) puts(“당신은 남자 입니다.”);
else puts(“당신은 여자 입니다.”);
}
첫 글자 이외의
나머지 쓰레기 문자
값을 모두 날려
버린다.
}
15
puts()
• int puts(const char *s);
– 인자
: 문자열 포인터
– 리턴값 : 출력되는 문자의 길이 (일반적으로 무시)
• 간이 예제
– puts(“jung jae une”);
– char *imsi = “archie”;
– puts(imsi);
– puts(“line one”);
– puts(“line two”);
16
puts()
• 포인터와 문자열
#include <stdio.h>
main()
{
int
char
i;
*s = “abcdefghijklmnopqrstuvwxyz”;
for(i = 0;i < 26;i++)
puts(s + i);
}
abcdefghijklmnopqrstuvwxyz
bcdefghijklmnopqrstuvwxyz
cdefghijklmnopqrstuvwxyz
defghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
jklmnopqrstuvwxyz
klmnopqrstuvwxyz
lmnopqrstuvwxyz
mnopqrstuvwxyz
nopqrstuvwxyz
opqrstuvwxyz
pqrstuvwxyz
qrstuvwxyz
rstuvwxyz
stuvwxyz
tuvwxyz
uvwxyz
vwxyz
wxyz
xyz
yz
z
처음 s는 ‘a’를 가리키고 한번
회전할 때마다 다음 문자를 가리키게
된다.
17
gets(), fgets()
•
char *fgets(char *s, int size, FILE *stream);
– stream으로부터 size 크기만큼 얻어 s에 저장
#include <stdio.h>
main()
{
char
dim[20];
printf(“What’s your name ? “);
fgets(dim, 20, stdin);
printf(“Your name is %s.\n”, dim);
}
What’s your name ? archie
Your name is archie.
•
다음처럼 포인터를 사용할 수
도 있음
char
*imsip;
imsip = (char *)malloc(20);
18
제 11 장 문자열 함수
19
목
•
•
•
•
•
•
•
•
차
문자열 함수
문자열 복사함수
문자열 연결함수
문자열 비교함수
문자열 탐색함수
문자열 변경함수
문자 검사함수
연습문제
20
문자열 함수 개론
• C의 문자열 함수는 다른 언어에 비해 부족함
• 함수의 이름이 함축적 임
• 사용법이 간단함
21
문자열 함수 종류
•
strcasecmp, strncasecmp, strcat, strncat, strlcat, strchr, strrchr,
strcmp, strncmp, strcpy, strncpy, strlcpy, strcspn, strspn, strdup,
strlen, strpbrk, strstr, strtok, strtok_r
복사
strcpy*, strncpy, strlncpy
연결
strcat*, strncat
비교
strcmp*, strncmp, strcasecmp, strncasecmp
탐색
strchr, strrchr, strstr
추출
strlen*, strpbrk, strtok, strtok_r, strspn, strcspn
22
문자열 함수 분류
어근
행동참조
str
n, r, case
내 용
접미사
cpy (copy)
문자열을 복사한다.
cat (concatenate)
문자열을 결합한다.
cmp (compare)
문자열을 비교한다.
len (length)
문자열의 길이를 구한다.
pbrk (break character)
지정한 문자열 중의 문자가 나타나는 지점의 위치를 리
턴한다.
chr (character)
문자 하나를 비교하고 위치를 리턴 한다.
str (string)
문자열을 비교하고 위치를 리턴 한다.
tok (token)
문자열을 추출한다.
23
문자열 함수 분류
•
•
•
•
str : string
r
: scan reversely
n
: number of character
case : case insensitivity
문자열 함수를 총칭
역순
문자의 개수를 참조
대소문자를 구별하지 않음
24
문자열 복사함수
함수 원형
char *strcpy(char *s1, const char *s2);
char *strncpy(char *s1, const char *s2, size_t n);
헤더 파일
string.h
리턴 값 : s1의 주소 값을 그대로 리턴
•
char *strcpy(char *s1, const char *s2)
– s2를 s1에 복사
– s2가 가리키는 문자열을 s1이 가리키는 영역에 복사
•
char *strncpy(char *s1, const char *s2, size_t n)
– s2를 s1에 n 문자길이만큼 복사
– s2가 가리키는 문자열을 s1이 가리키는 영역에 n
글자만큼 복사
25
문자열 복사함수
• 예제
(strcpy())
#include <string.h>
main()
{
char
char
source[10];
*dest = “Good Man”;
strcpy(source, “archie”);
puts(source);
strcpy(source, dest);
puts(source);
strcpy(source, dest + 5);
puts(source);
문자열 직접 복사
포인터 변수를 이용한
문자열 복사
포인터 연산을 통한 부분
문자열 복사
}
archie
Good Man
Man
26
strncpy()
• 예제 (strncpy())
#include <string.h>
main()
{
char
char
}
source[20] = {“This is a pen.”};
*dest = “This is a ink.”;
strncpy(source + 10, dest + 10, 3);
puts(source);
This is a ink.
strncpy(source, dest, strlen(dest));
puts(source);
This is a ink.
strncpy(source, dest + 10, 3);
puts(source);
inks is a pen.
strncpy(source, dest + 10, 3);
source[3] = ‘\0’;
puts(source);
ink
This is a ink.
This is a ink.
inks is a ink.
ink
27
문자열 연결함수
함수 원형
char *strcat(char *s1, const char *s2);
char *strncat(char *s1, const char *s2, size_t n);
int sprintf(char *str, const char *format, ...);
헤더 파일
string.h
string.h
stdio.h
리턴 값 : s1의 주소 값을 그대로 리턴한다.
28
strcat()
• char *strcat(char *s1, const char *s2)
– s1의 끝에 s2의 문자열을 추가
– s1이 가리키는 문자열의 끝에 널 문자를 제거하고 s1이 가리키
는 문자열을 추가
#include <string.h>
main()
{
char
char
source[20] = {“I love “};
*dest = “you!”;
strcat(source, dest);
puts(source);
dest가 가리키는 문자열을
source의 뒤에 추가한다.
source는 dest를 추가할
만큼 충분히 큰 크기여야
한다.
strcat(source, dest + 3);
puts(source);
}
I love you!
I love you!!
29
strncat()
•
char *strncat(char *s1, const char *s2, size_t n)
– s1에 s2의 n 길이만큼 추가
– s2가 가리키는 주소 값부터 n 길이만큼의 문자를 s1
#include
<string.h>문자열의 끝에 추가
이 가리키는
main()
{
char
char
source[50] = {“My phone number is ”};
*dest = “02-823-7656”;
strncat(source, dest, 11);
puts(source);
dest가 가리키는 문자열
중 에 서 1 1 문 자 만
source에 추가한다.
strncat(source, dest + 2, 9);
puts(source);
}
My phone number is 02-823-7656
My phone number is 02-823-7656-823-7656
30
sprintf()
•
int sprintf(char *str, const char *format, ...);
#include <stdio.h>
main()
{
char
char
int
join_string[20];
*string = “This is“;
number = 775;
변환 형식문자를 이용하여 문자열,
숫자등을 하나의 문자열로 구성할
수 있다.
sprintf(join_string, “[%s %d]”, string, number);
puts(join_string);
}
[This is 775]
31
문자열 비교함수
함수 원형
int strcasecmp(const char *s1, const char *s2);
int strncasecmp(const char *s1, const char *s2, size_t n);
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
헤더 파일
string.h
리턴 값 : s1 == s2 이면 리턴 값 0
s1 > s2 이면 양의 정수 리턴
s1 < s2 이면 음의 정수 리턴
32
문자열 비교함수
•
int strcasecmp(const char *s1, const char *s2)
– s1과 s2의 문자열을 비교하여 일치하면 0을 리턴
– s1이 가리키는 문자열과 s2가 가리키는 문자열을 비
교하고 일치하면 0을 리턴 하고 아니면 양수나 음수를
리턴
– 리턴 값이 0이면 두 문자열은 일치
– 대소문자는 구별하지 않음
•
int strncasecmp(const char *s1, const char *s2, size_t n)
– s1과 s2의 문자열을 n 길이만큼만 비교하여 일치하면
0을 리턴
– s1이 가리키는 문자열과 s2가 가리키는 문자열을 n 33
길이만큼만 비교하고 일치하면 0을 리턴 하고 아니면
문자열 비교 함수
•
int strcmp(const char *s1, const char *s2)
– s1과 s2를 비교하여 일치하면 0을 리턴
– s1이 가리키는 문자열과 s2가 가리키는 문자열을 비
different
교하고 일치하면 0을 리턴1.
하고
아니면 양수나 음수를
2.
equal
#include <string.h>
리턴
main()
–{ 대소문자를
구별함
char
*source = “Thank you”;
char
*object = “you”;
if(strcmp(source, object) == 0)
puts(“1. equal”);
else
puts(“1. different”);
strcmp()의 결과가 0이면 참이다.
즉, s o u r c e , o b j e c t 가 가리키는
문자열이 같다는 것이다.
포인터 연산을 이용하여 문자열 중에서 특정
문자열만 비교한다.
if(!strcmp(source + 6, object))
puts(“2. equal”);
else
puts(“2. different”);
}
34
문자열 비교함수
•
int strncmp(const char *s1, const char *s2, size_t n)
– s2의 문자 중에서 n 길이만큼 s1과 비교하여 같으면
0을 리턴
– s2가 가리키는 문자열 중에서 n 길이만큼 s1이 가리
키는 문자열과 비교하고 같으면 0을 리턴
– 대소문자를 구별함
35
문자열 비교함수
•
int strncmp(const char *s1, const char *s2, size_t n)
– s2의 문자 중에서 n 길이만큼 s1과 비교하여 같으면
0을 리턴
–#include
s2가<string.h>
가리키는 문자열 중에서 n 길이만큼 s1이 가리
키는 문자열과 비교하고 같으면 0을 리턴
main()
{
int
i = 0;
– 대소문자를
구별함
char
char
*source[] = { “Jung Jae Une”, “Park Un Ju”, “Jung Seo Youn”, NULL };
one[3], two[3];
널 포인터를 만날 때까지만 회전한다.
while(source[i])
성()이 ‘Jung’인 사람만
{
이 름 까 지 출 력 한 다 .
if(!strncmp(source[i], “Jung”, 4))
strncmp()가 특정한 문자열
puts(source[i]);
만큼만 비교할 수 있기
때문에 가능하다.
i++;
}
}
Jung Jae Une
Jung Seo Youn
36
문자열 탐색함수
함수 원형
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
char *strstr(const char *s1, const char *s2);
char *strpbrk(const char *s1, const char *s2);
헤더 파일
string.h
리턴 값 : 일치하는 문자나 문자열이 처음 발견되는 위치를 리턴
(주소 값 리턴)
37
문자열 탐색함수
• char *strchr(const char *s, int c)
– 문자열 s에서 문자 c가 발견되면 발견된 위치를 리턴
– s가 가리키는 문자열에서 문자 c가 발견되면 발견된
위치를 주소 값으로 리턴
<string.h>
–#include
만약 발견되지
않으면 널 포인터가 리턴 됨
main()
{
char
*source = “My birthday is @1968.12.21”;
printf(“%s\n”, strchr(source, ‘@‘) + 1);
}
1968.12.21
38
문자열 탐색함수
• char *strrchr(const char *s, int c)
– 문자열 s에서 문자 c가 발견된 위치를 리턴(단, 탐색
은 앞이 아닌 뒤에서 함)
– s가 가리키는 문자열에서 뒤쪽부터 c 문자를 탐색 (만
#include <string.h>
약 발견하지 못하면 널 포인터가 리턴 됨)
main()
{
char
*source = “/usr/home/archie”;
printf(“%s\n”, strrchr(source, ‘/’ ) + 1);
}
archie
39
문자열 탐색함수
•
char *strstr(const char *s1, const char *s2)
– 문자열 s1에서 문자열 s2를 찾아 일치하면 위치를 리
턴
– s1이 가리키는 문자열에서 s2가 가리키는 문자열을
#include
<string.h>
탐색하고
일치하는 위치의 주소 값을 리턴(만약 일치
main()
하는 문자열이 발견되지 않으면 널 포인터를 리턴함)
{
char
char
source[] = “I’m about 1 meter 90”;
*find_pointer;
puts(source);
find_pointer = strstr(source, “90”);
strcpy(find_pointer, “78”);
puts(source);
source가 가리키는
문자열 중에서 90을 78로
변경한다.
}
I’m about 1 meter 90
I’m about 1 meter 78
40
문자열 탐색함수
•
char *strpbrk(const char *s1, const char *s2)
– 문자열 s1 중에서 문자열 s2에 속해있는 어떠한 문자
라도 발견되면 발견된 위치를 리턴
– s1이 가리키는 문자열 중에서 s2가 가리키는 문자열
#include
<string.h> 어떠한 문자라도 발견되면 그 위치의 주
에 속해있는
main()
소 값을 리턴
{
char
*source = “My phone number is 825-1933. Are you OK?”;
if((source = strpbrk(source, “0123456789-“)) != NULL)
putchar(*source);
source가 가리키는 문자열 중에서 지정한 문자를
while(source++);
찾아 그 위치를 리턴한다. 지정한 문자가 하나가
do
}
아니라 여러 개 라는 것이 strchr()과의
차이점이다.
825-1933
41
문자열 변경함수
함수 원형
int atoi(const char *nptr);
long atol(const char *nptr);
double atof(const char *nptr);
헤더 파일
stdlib.h
리턴 값 : 문자열을 int형 정수, long형 정수, float형으로 리턴
42
atoi()
• 예제
(atoi())
#include <stdlib.h>
main()
{
char
char
char
*int_string = “75”;
*long_string = “70000009”;
*float_string = “7.5”;
printf(“%d %d %.1f\n”,
atoi(int_string), atol(long_string), atof(float_string));
}
75 70000009 7.5
43
sprintf()
• 예제
(sprintf())
#include <stdio.h>
main()
{
char
number[10];
sprintf(number, “%d”, 756);
puts(number);
sprintf(number, “%ld”, 70000009);
puts(number);
sprintf(number, “%.1f”, 7.9);
puts(number);
}
756
70000009
7.9
44
문자 검사함수
매크로 함수
설
명
int isalnum(int c);
c가 알파벳문자이거나 숫자이면 TRUE 반환
int isalpha(int c);
c가 알파벳문자이면 TRUE 반환
int isascii(int c);
c가 표준 아스키 문자(0~127)이면 TRUE 반환
int iscntrl(int c);
c가 제어문자이면 TRUE 반환
int isdigit(int c);
c가 숫자문자이면 TRUE 반환
int isgraph(int c);
c가 isalnum()이나 ispunct()에 속해있으면 TRUE 반환(단, 스페이스는 제외한다.)
int islower(int c);
c가 알파벳 소문자이면 TRUE 반환
int isupper(int c);
c가 알파멧 대문자이면 TRUE 반환
int isprint(int c);
c가 출력가능한 문자이면 TRUE 반환 – iscntrl()에 속해있는 문자는 FALSE가 됨. (스페이스
는 TRUE 이다.)
int ispunct(int c):
c가 구두점 문자이면 TRUE 반환
int isspace(int c);
c가 white space 문자이면 TRUE 반환 (white space – 개행문자, 탭, 수직 탭, 라인피드, 폼피드
등을 이야기 한다.)
int isxdigit(int c);
c가 16진 숫자문자이면 TRUE 반환
45
문자 검사함수
• 예제
(소문자를 대문자로 출력)
#include <stdio.h>
#include <ctype.h>
main()
{
int
char
i;
buff[20 + 1];
puts(“알파벳 소문자와 숫자를 입력하시오. ( < 20)”);
fgets(buff, sizeof(buff), stdin);
for(i = 0;i < strlen(buff);i++)
if(islower(buff[i])) putchar(buff[i] – ‘ ’);
else
putchar(buff[i]);
}
알파벳 소문자와 숫자를 입력하시오. ( < 20)
i love780 you.
I LOVE 780 YOU.
46
1.
•
•
2.
•
•
두 문자열을 비교하고 그 결과를 숫자가 아닌 다음과 같은 문자열로 출력
하시오.
일치할 때
: 두 문자열은 같습니다.
일치하지 않을 때
: 두 문자열은 일치하지 않습니다.
사용자로부터 두 개의 문자열을 입력 받고 두 문자열의 순서를 바꾸어서
다른 배열에 저장한 후 저장된 배열을 출력하시오.
입력 :
archie jung
출력 :
jung archie
47
1.
사용자로부터 문자열을 입력 받고 그 중에서 숫자가 아닌 것만 출력하시
오.
2.
사용자로부터 3 라인을 입력 받고 문자열의 길이와 라인 수, 공백 수를
출력하시오. (단, isspace() 함수를 사용한다.)
48
1.
사용자로부터 소수점이 있는 숫자를 입력 받고 다음과 같이 출력하도록
프로그램 하시오. (단, sprintf() 함수를 사용하시오.)
입력 :
34.25
출력 :
34.25 (소수점 이하 2 자리)
입력 :
출력 :
17.9478
17.9478 (소수점 이하 4자리)
49
2.
사칙 연산을 하는 프로그램을 작성하시오.
(단, 우선순위는 없으며 앞에서부터 처리)
입력 :
5+3*7
출력 :
56
// 만약 우선순위를 처리
한다면 105가 출력된다.
// 할 수 있다면 우선순위
의 개념을 넣어보자.
// 이때는 스택의 개념이
필요하다.
3.
10개의 정수 값을 받아 들이고 이중에서 가장 큰 수와
가장 작은 수를 출력하시오.
50