카테고리 없음

C에서의 문자열 처리

4gats 2024. 10. 29. 22:22

1. 사용자로부터 연속으로 문자를 입력받아 문자 배열에 저장하는 코드를 작성 하시오.

1. 사용자가 ‘x’ 를 입력할때까지의 문자를 배열에 저장(‘x’는 저장하지 않음)

2. 문자를 입력받을 때는 getchar() 함수를 사용

3. 문자를 저장하는 연산에서 배열의 인덱스가 아닌 포인터를 사용할 것

 

<소스 코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int main() {
    char arr[100];   // 문자를 저장할 배열
    char* ptr = arr; // 배열의 포인터 설정
    char input;
 
    printf("문자를 입력하세요 (종료: 'x'):\n");
 
    // 'x'를 입력할 때까지 문자를 받음
    while ((input = getchar()) != 'x') {
        if (input != '\n') {  // 엔터('\n')는 무시
            *ptr = input;     // 포인터를 사용해 배열에 문자 저장
            ptr++;            // 포인터를 다음 위치로 이동
        }
    }
 
    *ptr = '\0';  // 마지막에 문자열의 끝을 표시하는 널 문자 추가
 
    // 입력된 문자 출력
    printf("입력된 문자: %s\n", arr);
 
    return 0;
}
cs

 

1. 사용자로부터 입력받은 정수 배열과 문자 배열을 멤버로 가지는

구조체 struct input을 정의하고, 배열이 아닌 구조체의 멤버를 이용하여

사용자의 입력을 받도록 코드를 수정하시오.

 

<소스 코드>

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
55
56
57
#include <stdio.h>
 
#define MAX_SIZE 100  // 배열의 최대 크기
 
// 정수 배열과 문자 배열을 멤버로 가지는 구조체 정의
struct Input {
    int intArr[MAX_SIZE];     // 정수 배열
    char charArr[MAX_SIZE];   // 문자 배열
};
 
int main() {
    struct Input userInput; // 구조체 변수 선언
    char *charPtr = userInput.charArr; // 문자 배열 포인터 설정
    int *intPtr = userInput.intArr;    // 정수 배열 포인터 설정
    int num, intCount = 0;
    char input;
 
    printf("정수를 입력하세요 (종료: -1):\n");
 
    // 정수를 입력받아 구조체의 intArr 배열에 저장
    while (1) {
        scanf("%d"&num);
        if (num == -1break// -1을 입력하면 입력 종료
        if (intCount < MAX_SIZE) {
            *intPtr = num;  // 포인터를 사용하여 정수 저장
            intPtr++;
            intCount++;
        } else {
            printf("정수 배열의 크기를 초과했습니다.\n");
            break;
        }
    }
 
    getchar(); // 버퍼 비우기
 
    printf("문자를 입력하세요 (종료: 'x'):\n");
 
    // 문자를 입력받아 구조체의 charArr 배열에 저장
    while ((input = getchar()) != 'x') {
        if (input != '\n') {  // 엔터('\n')는 무시
            *charPtr = input; // 포인터를 사용하여 문자 저장
            charPtr++;
        }
    }
 
    *charPtr = '\0';  // 마지막에 문자열의 끝을 표시하는 널 문자 추가
 
    // 입력된 정수와 문자 출력
    printf("입력된 정수: ");
    for (int i = 0; i < intCount; i++) {
        printf("%d ", userInput.intArr[i]);
    }
 
    printf("\n입력된 문자: %s\n", userInput.charArr);
 
    return 0;
}
cs

 

1. 표준 입력으로 받은 한줄의 영어 문자열을 입력 받아

단어의 문자를 역순으로 출력하는 프로그램을 작성하시오.

1. 문자열 입력과 출력은 별도의 함수 (e.g., char_in, char_out)로 작성

2. main 함수에서 입력과 출력함수를 순차적으로 수행

3. 문자열 입력은 get_char()를 이용하여’.’ 마침표까지 입력받거나, gets()로 한줄의 문자열을 입력받음

 

<소스 코드>

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
#include <stdio.h>
#include <string.h>
 
#define MAX_LEN 100
 
// 문자열 입력 함수
void char_in(char* str) {
    printf("문자열을 입력하세요 (마침표로 끝냄): ");
    fgets(str, MAX_LEN, stdin); // 문자열을 입력받아 str에 저장. 개행 문자를 포함하여 저장한다.
    // strcspn 두 문자열이 처음 만나는 위치를 찾는 함수 
    // fgets()로 추가된 개행 문자를 '\0'로 제거한다
    str[strcspn(str, "\n")] = '\0'
}
 
// 문자열 출력 함수 - 각 단어의 문자를 역순으로 출력
void char_out(char* str) {
    int len = strlen(str);
    for (int i = len - 1; i >= 0; i--)
        printf("%c", str[i]);
    printf("\n");
}
 
int main() {
    char str[MAX_LEN];
 
    // 입력 받기
    char_in(str);
 
    // 출력하기 (단어의 문자를 역순으로 출력)
    char_out(str);
 
    return 0;
}
 
cs

 

https://www.acmicpc.net/problem/9012

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
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
char st[60];
 
int main()
{
    int t;
    scanf("%d"&t);
    // 개행 문자 버퍼 제거
    getchar();
 
    while (t--)
    {
        char str[60];
        fgets(str, sizeof(str), stdin); // 문자열 입력 받기
        int st_idx = 0;
        int valid = 1;
 
        for (int i = 0; i < strlen(str); i++)
        {
            if (str[i] == '(')
            {
                st[st_idx++= str[i];
            }
            else if (str[i] == ')') {
                // 스택이 비었다면
                if (!st_idx) {
                    valid = 0;
                    break;
                }
                // pop
                st_idx--;
            }
        }
 
        if (valid && (st_idx == 0))
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
 
cs