카테고리 없음

C언어 - 쉽게 풀어쓴 C언어 express 12장 문자열 실습문제(짝수번)

Jminu 2022. 8. 8. 23:02

2번.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
#include<string.h>
 
int main(void)
{
    char str[100];
    char seps[] = " "//공백으로 나눌것임
    char *token;
 
    printf("공백문자가 있는 문자열을 입력하시오 :");
    gets(str); //문자열 받음
 
    token = strtok(str, seps);
 
    while(token != NULL){
        printf("%s", token);
        token = strtok(NULL, seps);
    }
    printf("\n");
 
    return 0;
}
cs

4번.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<stdio.h>
 
void str_chr(char *s, int c);
 
int main(void)
{
    char str[100];
    char alp;
    char ascii;
    
    printf("문자열을 입력하시오 : ");
    gets(str);
 
    for(ascii = 97; ascii < 123; ascii++){
        str_chr(str, ascii);
    }
    
    return 0;
}
 
void str_chr(char *s, int c)
{
    int i;
    int counting = 0;
 
    for(i = 0; i < (sizeof(s) / sizeof(s[0])); i++){
        if(c == s[i]){
            counting++;
        }
        else
            continue;
    }
 
    printf("%c : %d\n", c, counting);
}
cs

6번.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<stdio.h>
#include<ctype.h>
#include<string.h>
 
void convert_upper(char *s);
 
int main(void)
{
    char str[50];
 
    printf("문자열을 입력하시오 : ");
    gets(str);
 
    convert_upper(str);
 
    printf("변환된 문자열 : ");
    puts(str);
 
    return 0;
}
 
void convert_upper(char *s)
{
    for(int i = 0; i < strlen(s); i++){
        if(islower(s[i])){
            s[i] = toupper(s[i]);
        }
        else
            continue;
    }
}
cs

8번.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<stdio.h>
#include<ctype.h>
 
int count_word(char *s);
 
int main(void)
{
    char str[100];
 
    printf("문자열을 입력하시오 : ");
    gets(str);
 
    printf("단어의 수는 %d입니다.\n", count_word(str));
 
    return 0;
}
 
int count_word(char *s)
{
    int i = 0;
    int wc = 0;
    int waiting = 1;
 
    for(i = 0; s[i] != NULL; i++){
        if(isalpha(s[i])){
            if(waiting){
                wc++;
                waiting = 0;
            }
            else
                continue;
        }
        else
            waiting = 1;
    }
    return wc;
}
cs

10번.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<stdio.h>
#include<string.h>
#include<ctype.h>
 
void convertor_lower(char *s);
void palindrome(char *s);
 
int main(void)
{
    char str[100];
 
    printf("문자열을 입력하시오 : ");
    gets(str);
 
    convertor_lower(str);
    palindrome(str);
 
    return 0;
}
 
void convertor_lower(char *s) //대문자를 소문자로 바꿔주는 함수
{
    for(int i = 0; s[i] != NULL; i++){
        if(isupper(s[i])){
            s[i] = tolower(s[i]);
        }
        else
            continue;
    }
 
void palindrome(char *s) //회문 판독기
{
    char str[100];
 
    for(int i = 0; s[i] != NULL; i++){
        str[i] = s[strlen(s) - (i + 1)];
    }
    printf("%s\n", str);
 
    for(int i = 0; str[i] != NULL; i++){
        if(str[i] != s[i]){
            printf("회문이 아닙니다.\n");
            break;
        }
        else
            printf("회문입니다.\n");
            break;
    }
}
cs

12번.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<stdio.h>
#include<ctype.h>
#include<string.h>
 
void change_name(char *s);
 
int main(void)
{
    char str[20];
 
    printf("이름을 입력하시오 : ");
    gets(str);
 
    change_name(str);
 
    return 0;
}
 
void change_name(char *s)
{
    int i = 0;
    char seps[] =  " ";
    char *token;
    char *name[3]; //포인터 배열(주소가 배열로 저장된다)
 
    token = strtok(s, seps); //첫번째 토큰 얻음
 
    while(token != NULL){
        name[i] = token;
        token = strtok(NULL, seps); //strtok함수 포인터형으로 반환함
        i++;
    }
 
    printf("%s %s, %s\n", name[1], name[2], name[0]);
}
cs

14번.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include<stdio.h>
#include<string.h>
 
void find_change(char *s, char *find_word, char *change_word);
 
int main(void)
{
    char str[80];
    char find_word[20];
    char change_word[20];
 
    printf("문자열을 입력하시오 : ");
    gets(str);
 
    printf("찾을 문자열 : ");
    gets(find_word);
 
    printf("바꿀 문자열 : ");
    gets(change_word);
 
    find_change(str, find_word, change_word);
    printf("\n");
 
    return 0;
}
 
void find_change(char *s, char *find_word, char *change_word)
{
    char *token;
    char seps[] = " ";
    char *string[50]; //50단어 저장가능(주소를 저장할 수 있는 50개의 칸)
    int count = 0;
 
    token = strtok(s, seps);
 
    for(int i = 0; token != NULL; i++){ //토큰으로 다 나눠서, 배열로 저장한다.
        string[i] = token;
        token = strtok(NULL, seps);
        count++//for이 끝나면 단어의 수가 count에 저장됨
    }
 
    for(int i = 0; i < count; i++){
        if(!strcmp(find_word, string[i])){ //동일하면 if문 실행
            string[i] = change_word;
        }
        else //동일하지 않으면 양수반환
            continue;
    }
    printf("결과 : ");
 
    for(int i = 0; i < count; i++){
        printf("%s "string[i]);
    }
}
cs