일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 그리디
- MST
- 트리
- join
- 플로이드-워셜
- 서브쿼리
- 다이나믹프로그래밍
- 시뮬레이션
- 해시
- 백트래킹
- 다익스트라
- 구현
- 우선순위큐
- 크루스칼
- 투포인터
- 분할정복
- 그래프 이론
- 재귀
- GROUP BY
- BFS
- 누적합
- 다시
- 자료구조
- DFS
- 다이나믹 프로그래밍
- 에라토스테네스의 체
- 수학
- 그래프 탐색
- 브루트포스
- DP
- Today
- Total
기록하고 까먹지 말기
과제8 - Pointer Array (6 ~ 10) 본문
string의 배열을 반대로 만들어 출력하는 문제다.
#include <stdio.h>
#define MAX_SIZE 100 // maximum size of array
int main(){
char str[MAX_SIZE], reverse[MAX_SIZE];
char *s = str;
char *t = reverse;
int len = 0;
printf("Enter any string: ");
gets(str);
int i = 0;
while(s[len] != 0) len++; // getting length of entered string
// setting reversed string
for(i=0; i<len; i++){
reverse[i] = *(s+len-1-i);
}
// printing output
printf("\nOriginal string = %s\n", str);
printf("Reverse string = %s", reverse);
return 0;
}
str의 size를 만든 후 len의 길이를 구한다.
그 다음 len-1을 i의 초깃값으로 설정해 for문을 통해 스펠링 하나씩 reverse에 복사한다.
그리고 출력하면 끝
str의 크기는 사전에 정의했듯이 100이다. 그렇지만 문자열의 끝 다음에는 무조건 null값이 나오기 때문에 while(s[len] != 0)을 통해 null값이 나올때까지 len을 증가시킴으로써 입력한 문자열의 크기를 구할 수 있었다.
array의 크기와 그에 맞게 element를 입력받고 search하는 문제이다.
#include <stdio.h>
#define MAX_SIZE 100 // maximum size of array
int main(){
// declaring array and variables
int n, i, search;
int arr[MAX_SIZE];
int* ptr = arr; // declaring pointer pointing array
printf("Enter size of array: "); // input size of array from user
scanf("%d", &n);
// input element from user with pointer
printf("Enter elements in array: ");
for(i=0; i<n; i++){
scanf("%d", (ptr+i));
}
// input value of element to search
printf("Enter element to search: ");
scanf("%d", &search);
// searching value in array with pointer
for(i=0; i<n; i++){
if(*(ptr+i) == search){
printf("%d is found at %d position.", *(ptr+i), i+1);
break;
}
}
if(i == n) // if not found
printf("%d is not found.", search);
return 0;
}
for문을 사용하여 비교적 쉽게 문제를 해결할 수 있었다.
Q6과 같이 string을 활용하는 문제다. 다만, 입력한 문자열의 길이만을 출력하는 문제이기 때문에 더욱 간단하다.
#include <stdio.h>
#define MAX_SIZE 100 // maximum size of an array
int main(){
char text[MAX_SIZE]; // declaring array and variables
char * str = text;
int count = 0;
printf("Enter any string: "); // input string from user
gets(text);
while(text[count] != 0) count++; // counting length of string
printf("Length of '%s' = %d", text, count); // printing output
return 0;
}
두 개의 string을 concat 함수를 사용하지 않고 이어붙이는 문제다.
#include <stdio.h>
#define MAX_SIZE 100 // maximum size of array
int main(){
char str1[MAX_SIZE], str2[MAX_SIZE]; // declaring pointers and arrays
char * s1 = str1;
char * s2 = str2;
printf("Enter first string: "); // input strings from user
gets(str1);
printf("Enter second string: ");
gets(str2);
int len=0, i=0;
while(str1[len] != 0) len++; // counting length of first string
str1[len] = ' '; // inserting space into str1
len++; // increasing length of str1
while(str2[i] != 0){
str1[len] = str2[i]; // inserting str2's element into str1
len++; // increasing position of str1 and str2
i++;
}
printf("Concatenated string = %s", str1); // printing output of concatenated string
return 0;
}
먼저 str1과 str2의 길이를 구한 다음에 str1의 마지막, 즉 null값인 위치에서 시작, 그곳에서부터 str2의 스펠링을 하나씩 붙이는 방식으로 문제를 해결했다.
이는 str2의 값이 null이 나올때까지 진행하면 된다.
string str1과 str2를 입력받고 대문자의 개수가 누가 많은지를 측정하는 문제다.
compare 함수에 이를 인자로 보내어 비교하였다.
#include <stdio.h>
#define MAX_SIZE 100 // maximum size of an array
int compare(char * str1, char * str2);
int main(){
char str1[MAX_SIZE], str2[MAX_SIZE]; // declaring array and variable
int res;
printf("Enter first string: "); // input 2 strings to compare
gets(str1);
printf("Enter second string: ");
gets(str2);
res = compare(str1, str2); // sending memory address to function
if(res == 0){ // printing outputs
printf("Both strings are equal.");
}
else if(res < 0){
printf("First string is lexicographically smaller than second.");
}
else{
printf("First string is lexicographically greater than second.");
}
return 0;
}
int compare(char * str1, char * str2){
int comp = 0; // declaring variable to return
int i=0; // index
while(str1[i] != 0 && str2[i] != 0){ // repeat until string is over
if(str1[i] > str2[i]) // if str1's element is larger than str2's
comp--;
else if(str1[i] == str2[i]){} // if each same alphabet size
else // reversed case
comp++;
i++; // increasing index
}
return comp; // return operated value
}
우선 입력한 문자열들이 null값이 아닌 경우에 계속 비교하는 것으로 while문 조건을 작성, 그 안에는 if~else문을 통해 스펠링은 하나씩 비교함으로써 비교 변수인 comp를 증감하는 방식으로 코드를 작성했다.
그리고 while문을 탈출하고 나서는 아웃풋을 리턴 및 출력함으로써 문제를 해결했다.
'전공 > C' 카테고리의 다른 글
과제9 - Pointer Dynamic (6 ~ 9) (0) | 2021.06.22 |
---|---|
과제9 - Pointer Dynamic (1 ~ 5) (0) | 2021.06.22 |
과제8 - Pointer_Array (1 ~ 5) (0) | 2021.06.22 |
과제7 - Array (1 ~ 4) (0) | 2021.06.22 |
Mid Coding Test (0) | 2021.06.22 |