문자열과 포인터를 공부하고 있어서 백준 예제 문제와 실습문제로 주어진 문제 몇가지들을 풀어보았습니다.
배열과 문자열을 포인터를 활용하여 접근하면 call by reference 이기때문에, call by value와 다르게 활용할수있는 방법이 많았습니다. 꾸준히 연습해서 자유자재로 다룰 수 있도록 연습할 것 입니다.
https://www.acmicpc.net/problem/10809
#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h>
/* BOJ 10809 */
int main() {
char str[100];
int len;
char ch = 'a';
scanf("%s", str);
len = strlen(str);
char* p;
int cnt = 0;
p = str;
for(ch='a';ch<='z';ch++){
cnt = 0;
for(p=str;p<str+len;p++){
if (*p == ch) {
printf("%d ", p - str);
cnt++;
break;
}
}
if (cnt == 0) printf("-1 ");
}
return 0;
}
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
|
#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h>
/* 문자열 1번 포인터로 풀어보기*/
int main() {
char s1[30]=" ";
char s2[30]=" ";
int len1=0, len2 = 0;
int max_len = 0;
int* p=NULL;
char* ps1, * ps2;
scanf("%s", s1);
scanf("%s", s2);
len1 = strlen(s1);
len2 = strlen(s2);
if (len1 > len2) max_len = len1;
else max_len = len2;
ps1 = s1;
ps2 = s2;
int i = 0;
for (i=0; i < max_len; i++) {
if (*(ps1+i) == *(ps2+i)) printf("O");
else printf("X");
}
return 0;
}
|
cs |
문제를 그냥 읽으면 맨 앞글자와 나머지 문자들을 분리해서 이동시키는 작업을 N번 하는것을 구현하는것처럼 보이지만
쉽게 생각해서 그냥 정렬하는 문제입니다.
정렬알고리즘에서 원래 문자열의 길이만큼 행하는 횟수를 사용자로 부터 입력받는것입니다.
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
|
#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h>
/* 문자열 2번 함수로 구현하기*/
void changestr(char* p, int len);
int main() {
char s[30]="";
int N;
int len;
scanf("%s", s);
scanf("%d", &N);
len = strlen(s);
for (int i = 0; i < N; i++) {
changestr(s, len);
}
printf("%s", s);
return 0;
}
//simpson ==> changestr ==> impsons
void changestr(char * p,int len)
{
for (int i = 0; i < len-1; i++) {
char temp = *p;
*p = *(p + 1);
* (p + 1)=temp;
p++;
}
}
|
cs |
N개의 정수를 두 번 입력받아 (N ≤ 20), 역방향으로 더하여 출력하는 프로그램을 작성하시오.
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
|
#pragma warning(disable:4996)
#include <stdio.h>
addArray(int* a, int* b, int* c, int n);
int main() {
int N;
int Num[3];
int Num2[3];
int sum_Num[3] = { 0 };
int* a, * b, * c,*p1;
scanf("%d", &N);
for (a = Num; a < Num + N; a++) {
scanf("%d", a);
}
for (b = Num2; b < Num2 + N; b++) {
scanf("%d", b);
}
c = sum_Num;
addArray(Num, Num2, sum_Num,N);
for (p1=c;p1<c+N;p1++){
printf("%d ",*p1);
}
return 0;
}
addArray(int* a, int* b, int* c, int n)
{
int* p;
for (p = c; p < c + n; p++) {
*p = *a + *(b+n-1);
a++;
b--;
}
}
|
cs |
'지난 학기들의 기록 > C 기초' 카테고리의 다른 글
[C실습] 동적할당 예제 - realloc함수를 쓰지않고 배열의 크기 바꾸기 (0) | 2020.08.22 |
---|---|
[C실습] 동적할당예제 - 2차원 배열 활용 (0) | 2020.08.21 |
[C실습] 배열예제 - 2차원 배열에서 다른 배열찾기 (0) | 2020.06.08 |
[C실습] 배열예제 -초를 입력받고 그 후의 시,분,초 구하기 (0) | 2020.06.02 |
[C실습] 함수 예제 - 시저암호화 및 복호화(Caesar cipher,카이사르 암호)+수정(파이썬코드 추가) (1) | 2020.06.01 |
댓글