12장 Programming
1.
#include <stdio.h>
void main(){
char c;
printf("문자를 입력하시오: ");
scanf("%c", &c);
printf("아스키 코드값=%d", c);
}
2.
#include <stdio.h>
void space_delete(char *str);
void main(){
char str[100];
printf("공백 문자가 있는 문자열을 입력하시오: ");
gets(str);
space_delete(str);
}
void space_delete(char *str){
int i=0;
while(str[i]!=NULL){
if(str[i]!=' ')
printf("%c", str[i]);
i++;
}
}
3.
#include <stdio.h>
int str_chr(char *s, int c);
void main(){
char s[100];
char c;
printf("문자열을 입력하시오: ");
gets(s);
printf("개수를 셀 문자를 입력하시오: ");
scanf("%c", &c);
printf("%c의 개수 : %d", c, str_chr(s, c));
}
int str_chr(char *s, int c){
int i, count=0;
for(i=0; s[i]!=NULL; i++){
if(s[i]==c)
count++;
}
return count;
}
4.
#include <stdio.h>
int str_chr(char *s, int c);
void count_chr(char *s);
void main(){
char s[100];
char c;
printf("문자열을 입력하시오: ");
gets(s);
count_chr(s);
}
int str_chr(char *s, int c){
int i, count=0;
for(i=0; s[i]!=NULL; i++){
if(s[i]==c)
count++;
}
return count;
}
void count_chr(char *s){
int i;
for(i='a'; i<='z'; i++)
printf("%c: %d\n", i, str_chr(s,i));
}
5.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void upper_lower(int c);
void main(){
int c;
printf("문자를 입력하시오: ");
while((c=getchar())!='.'){
fflush(stdin);
if(islower(c)){
c=toupper(c);
putchar(c);
}
else if (isupper(c)){
c=tolower(c);
putchar(c);
}
printf("\n");
printf("문자를 입력하시오: ");
}
}
6.
#include <stdio.h>
void str_upper(char *s);
void main(){
char s[100];
printf("문자열을 입력하시오: ");
gets(s);
str_upper(s);
printf("변화된 문자열: ");
puts(s);
}
void str_upper(char *s){
int i;
for(i=0; s[i]!=NULL; i++)
if(s[i]>='a' && s[i]<='z')
s[i] += 'A' - 'a';
}
7.
#include <stdio.h>
#include <string.h>
int get_response(char *prompt);
void main(){
char prompt[10];
printf("게임을 하시겠습니까? ");
gets(prompt);
if(get_response(prompt)==1)
printf("긍정적인 답변");
else
printf("부정적인 답변");
}
int get_response(char *prompt){
strlwr(prompt);
if(strcmp(prompt, "no")==0)
return 0;
else if (strcmp(prompt, "yes")==0 || strcmp(prompt, "ok")==0)
return 1;
}
8.
#include <stdio.h>
#include <string.h>
int count(char *str);
char *token;
void main(){
char str[100];
printf("문자열을 입력하시오: ");
gets(str);
printf("단어의 수는 %d입니다.", count(str));
}
int count(char *str){
int count=1;
token = strtok(str, " ");
while(token!=NULL){
count++;
token=strtok(NULL, " ");
}
return count;
}
9.
#include <stdio.h>
#include <string.h>
char check_upper(char *str);
char check_punct(char *str);
void main(){
char str[100];
printf("텍스트를 입력하시오: ");
gets(str);
check_upper(str);
check_punct(str);
printf("결과 텍스트 출력: %s", str);
}
char check_upper(char *str){
if(islower(str[0]))
str[0]=toupper(str[0]);
return str;
}
char check_punct(char *str){
if(ispunct(str[strlen(str)-1])==0)
str[strlen(str)]='.';
return str;
}
10.
#include <stdio.h>
#include <string.h>
int check_palindrome(char *str);
void main(){
char str[100];
printf("문자열을 입력하시오: ");
gets(str);
strupr(str);
if(check_palindrome(str)==0)
printf("회문입니다.");
else
printf("회문이 아닙니다.");
}
int check_palindrome(char *str){
int i, count=0;
for(i=0; i<strlen(str)/2; i++){
if(str[i]==str[strlen(str)-1-i])
count+=0;
else
count+=1;
}
return count;
}
11. ★★★★
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(){
char str[100];
char *word[100]; // 배열이 아니라 포인터배열이여야만 여러글자를 한 칸에 넣을 수 있다. 주소지(여기서는 token)를 가르키는 방법으로 && 저장될 곳을 미리 할당해주어야 한다.
char *token;
int i, count=0;
printf("문자열을 입력하시오: ");
fgets(str, sizeof(str), stdin);
str[strlen(str)-1] = NULL; // 남은 빈칸에 쓰레기값이 들어가는 것을 방지함
token = strtok(str, " ");
for(i=0; token!=NULL; i++){
word[i] = token; // 문자열에서 찾은 마지막 토큰의 주소값을 리턴하며 토큰이 더이상 없다면 NULL 포인터를 리턴한다.
token = strtok(NULL, " ");
count++;
}
printf("출력문자열: ");
for(i=0; i<count; i++){
printf("%s ", word[count-i-1]);
}
}
비고) scanf함수는 공백, \t, \n이 오기 전까지의 의미있는 값들을 받는 함수이다. 즉 중간에 띄어쓰기가 있다면 scanf는 띄어쓰기가 포함된 모든 문자열을 입력값으로 받는 것이 아니라 첫번째 띄어쓰기 전까지의 입력값만을 받고 나머지는 버퍼stdin에 저장된다. 문제에서 요구하는 '엔터키가 눌려질 때까지 사용자로부터 문자열을 입력받아서' 라는 문장의 의미는 \n이 오기 전까지 공백과 \t이 포함된 문자열을 받는 fgets함수를 사용하라는 의미이다. scanf함수의 복잡성을 알지 못한다면 다소 이해하기 어려운 문제이다.
기본형식: char *fgets(char *str, int num, FILE*stream);
scanf 함수의 앞부분을 생략하는 것처럼 처음의 char * 은 보통 생략한다. 첫 번째 인자는 저장할 배열을 의미한다. 두 번째 인자는 마지막 NULL문자를 포함하여 읽어들일 문자의 수를 의미한다. 세 번째 인자는 문자열을 받아들일 스트림의 FILE 객체를 가르키는 포인터이다. 보통 표준입력에서 입력을 받기때문에 대개 stdin을 쓴다.
성공적으로 읽어드렸다면 함수는 str을 반환하고 오류가 발생하거나 아무것도 읽어드리지 못했다면 NULL 포인터를 반환한다.
12.
#include <stdio.h>
#include <string.h>
char get_punct(str);
void main(){
char str[100];
char *name[100];
char *token;
char seps[]=" ";
int i, count=0;
printf("영어 이름을 입력하시오: ");
fgets(str, sizeof(str), stdin);
strlwr(str);
str[strlen(str)-1]=NULL;
token = strtok(str, seps);
for(i=0; token!=NULL; i++){
name[i]=token;
token=strtok(NULL, seps);
count++;
}
printf("변환된 이름: %s %s, %s", name[1], name[2], name[0]);
}
13.
#include <stdio.h>
#include <string.h>
void main(){
char str[100];
int i, count=0;
printf("텍스트를 입력하시오: ");
fgets(str, sizeof(str), stdin);
str[strlen(str)-1]=NULL;
for(i=0; str[i]!=NULL; i++)
if(str[i]=='.' || str[i]==',')
count++;
printf("구두점의 갯수는 %d개입니다.", count);
}
14. ★★
#include <stdio.h>
#include <string.h>
void main(){
char str[80];
char word1[10];
char word2[10];
char *token;
char *str2[80];
int i, count=0;
printf("문자열을 입력하시오(최대 80자): ");
fgets(str, sizeof(str), stdin);
str[strlen(str)-1]=NULL;
printf("찾을 문자열: ");
fgets(word1, sizeof(word1), stdin);
word1[strlen(word1)-1]=NULL;
printf("바꿀 문자열: ");
fgets(word2, sizeof(word2), stdin);
word2[strlen(word2)-1]=NULL;
token = strtok(str, " ");
for(i=0; token!=NULL; i++){
str2[i]=token;
token=strtok(NULL, " ");
count++;
}
for(i=0; i<count; i++)
if(strcmp(word1, str2[i])==0)
str2[i] = word2;
printf("결과: ");
for(i=0; i<count; i++)
printf("%s ", str2[i]);
}
15.
#include <stdio.h>
#include <string.h>
void main(){
char str[3];
int x, y, result;
printf("연산을 입력하시오: ");
scanf("%s %d %d", &str, &x, &y);
if(strcmp(str, "add")==0) result=x+y;
else if(strcmp(str, "sub")==0) result=x-y;
else if(strcmp(str, "mul")==0) result=x*y;
else if(strcmp(str, "div")==0) result=x/y;
printf("연산의 결과: %d", result);
}
16. ★★★
(a) 매 반복마다 실제로 문자 배열의 내용을 수정
(b) 포인터를 이용하여 현재 위치에서 일정길이만큼 화면 표시
'프로그래밍 > 쉽게 풀어쓴 C언어 Express' 카테고리의 다른 글
쉽게 풀어쓴 C언어 Express 13장 Summary (0) | 2018.11.26 |
---|---|
쉽게 풀어쓴 C언어 Express 13장 Exercise (1) | 2018.11.26 |
쉽게 풀어쓴 C언어 Express 12장 Exercise (0) | 2018.11.16 |
쉽게 풀어쓴 C언어 Express 12장 Summary (2) | 2018.11.14 |
쉽게 풀어쓴 C언어 Express 11장 Programming (0) | 2018.11.13 |