카테고리 없음
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 == -1) break; // -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 |