/*문제 1
길이가 최대 100 인 문자열을 하나 입력 받아서 문자열을 역순으로 출력하는 함수를 만들어보세요. (난이도 : 下)
예를 들어서 "abcde" 입력 --> "edcba" 출력
함수가 할 일: 문자열의 순서를 역순으로 바꿔서 출력한다.문자열의 갯수를 세고, 제일 뒤에 제일 앞을 넣고 그걸 문자열의 길이 /2까지 반복하는 \0이 나오는 n구하고 arr[n]에 대입
arr[i]=arr[n-i] 범위는 n/2
리턴값:num
받아야하는 인자: char형 문자열 하나
*/
#include <stdio.h>
int change(char* str);
int main() {
int num;
char arr[100];
printf("문자열을 입력하세요");
scanf("%s",arr);
num = change(arr);
printf("문자열의 숫자는: %d\n", num);
for (int i = 0; i < num; i++) {
printf("%c",arr[num-i-1]);
}
return 0;
}
int change(char* str) {
int num=0;
while (*str) {
num++;
str++;
}
return num;
}//ez
/*
문제 2
길이가 최대 100 인 문자열을 입력 받아서 소문자는 대문자로, 대문자는 소문자로 출력하는 함수를 만들어보세요. (난이도 : 下) 예를 들어서 "aBcDE" 입력 --> "AbCde" 출력
함수가 해야하는일: 0이 나올때까지 반복하면 되고 문자열이 대문자 아스키 코드일때 소문자 아스키 코드일때 로 구분해서 각 값의 차만큼 계산해서 풀어주면 된다.
리턴값: 리턴 0
인자: 문자열
*/
#include<stdio.h>
int exchange(char* arr);
int main() {
char arr[100];
printf("write any word (word<100)");
scanf("%s",arr);
exchange(arr);
return 0;
}
int exchange(char* arr) {
while (*arr) {
if (65 <= *arr&& *arr<= 90) {
*arr +=32;
printf("%c", *arr);
}
else if (97 <= *arr&&*arr <= 122) {
*arr -=32;
printf("%c", *arr);
}
else { printf("%c", *arr); }
arr++;
}
return 0;
}//두번째 문제는 조건식을 할때 생각없이 a<b<c이런식으로 작성해서 살짝 애를 먹었지만 쉽게 품
문제 3번은 이전에 본문에서 문제를 풀었기 때문에 패스
/*문제 4
문자열을 두 개 입력 받아서 먼저 입력받은 문자열에서 나중에 입력받은 문자열의 위치를 검색하는 함수를 만들어보세요.
만일 없다면 -1 을 리턴하고 있다면 그 위치를 리턴합니다. (난이도 : 中)
예를 들어먼저 처음 입력한 것이 I_am_a_boy 이고, 나중에 입력한 것이 am 이였다면 컴퓨터는 I_am_a_boy 에서 am 의 위치를 찾는다.
이 경우에는 am 의 위치는 2 (처음에서 세번째) 이므로 2 를 리턴한다. 만일 am 이라는 문자열이 없다면 -1 을 리턴한다.
이 함수가 하는 일: 문자열 2개를 입력받아서 두개를 비교한다. 두번째 문자열의 앞 부분의 모양이 같은 문자를 찾는다. 찾았다면 다음문자까지 같은지 본다. 아니라면 1번 문자열에 다른게 있는지 본다.
다시 있다면 비교를 한다. 1번 문자열이 0이 된다면 -1을 리턴한다. 만약 문자열이 같은 부분이 있고 2번 문자열이 0이 될때까지 반복해서 같다면 첫번째 문자열 그 부분을 출력한다.
함수의 리턴값: 문자열이 다르면 -1 있다면 숫자 num출력
인자값: char형 문자열 2개 포인터로 입력받기
*/
#include<stdio.h>
int find_same(char* str1, char* str2/*, int num1, int nu2*/);
//int num_str(char* str);
int main() {
char arr1[300];
char arr2[300];
int n;
//int n1, n2;
printf("첫번째 문자열을 입력해주세요");
scanf("%s", arr1);
printf("두번째 문자열을 입력해주세요");
scanf("%s", arr2);
//n1 = num_str(arr1);
//n2 = num_str(arr2);
n = find_same(arr1, arr2/*n1, n2*/);
if (n == -1) {
printf("문자열에 동일한게 없습니다.");
}
else {
printf("두번째 문자열의 위치는 %d이다.", n);
}
return 0;
}
int find_same(char* str1, char* str2 /*, int num1, int num2*/) {
int t=0;
int k = 0;
int j = 0;
while (*str1) {
while (*str2) {
j++;
if (*str2 == *str1) {
str2++;
t++;
str1++;
k++;
if (*str2 == 0) {
return k;
}
}
else {
break;
}
}
str2 -= t;
t = 0;
str1++;
}
return -1;
}
/*
int num_str(char* str) {
int num=0;
while (*str) {
str++;
num++;
}
return num;
}
*/
//왠지 쓸 것 같았던 문자열의 숫자 구하기는 필요가 없어져서 주석 표시로 지웠다.
//이걸 풀면서 실력이 많이 늘었음을 느낀다.
/*
문제 5
도서 관리 프로그램을 만들어봅시다. 프로그램에는 다음과 같은 기능들이 구현되어 있어야 합니다. (난이도 : 上)
책을 새로 추가하는 기능 (책의 총 개수는 100 권이라 하자. 이 때, 각 책의 정보는 제목, 저자의 이름, 출판사로 한다)
책의 제목을 검색하면 그 책의 정보가 나와야 한다.
위와 마찬가지로 저자, 출판사 검색 기능이 있어야 한다.
책을 빌리는 기능.
책을 반납하는 기능
프로그램 만들기 일단 각 도서별 제목 저자 이름 출판사이므로 배열을 2차원으로 만들어서 책을 저장하자. book[100][4]이런식으로 책
제목,지은이 출판사 대출여부
만들 함수 : 1. 누르면 책 추가 2: 책 검색 3: 출판사 검색 4. 책 빌리기 5. 책 반납
1: 배열에 책을 추가하는 방법 현재까지 몇개가 차있는지 알아야하고 즉 배열의 갯수 먼저 두번째로 그 다음칸에 정보를 3개를 입력해야한다.
2. 책 검색 :검색을 book[][0]중에서 하도록 해야한다.
3. 출판사 검색 book[][2] 에서 해야됨
4. 책을 빌리는 기능은 그 책을 검색해서 그게 몇번째 있는지 알아보고 대출가능 여부를 바꾼다.
*/
#include<stdio.h>
int new_book(char(* book)[4]);//리턴값 0
int find_bookname(char(*book)[4]);//리턴값 책이 몇번째 있는지 num
int find_bookpubilsher(char(*book)[4]);//리턴값 역시 책이 몇번째 있는지 num
int book_borrow(char(*book)[4]);//책의 이름을 받아서 대출 가능상태: 1 불가능 상태: 0
int booknum(char(*book)[4]);
int main() {
char book[100][4];
int n;
printf("1. 책을 추가하기\n2. 책이름 검색하기\n3. 출판사로 검색하기\n4. 책 빌리기\n5. 책 반납하기\n다른키를 누르면 프로그램은 종료");
scanf("%d",&n);
switch (n) {
case 1: new_book(book);
break;
case 2:
find_bookname(book);
break;
case 3:
find_bookpubilsher(book);
break;
case 4:
book_borrow(book);
break;
case 5:
book_borrow(book);
break;
default:
return 0;
}
return 0;
}
int new_book(char(*book)[4]) {
int num = booknum(book);
if (num== 0) { num = 1; }
printf("추가할 책의 이름을 입력하세요");
scanf("%s",&book[num-1][0]);
printf("추가할 책의 지은이를 입력하세요");
scanf("%s",&book[num - 1][1]);
printf("추가할 책의 출판사를 입력하세요");
scanf("%s",&book[num - 1][2]);
printf("추가할 책의 갯수를 입력하세요");
scanf("%s",&book[num - 1][3]);
return 0;
}
int find_bookname(char(*book)[4]) {
return 0;
}
int find_bookpubilsher(char(*book)[4]) {
return 0;
}
int book_borrow(char(*book)[4]) {
return 0;
}
int booknum(char(*book)[4]) {
int n = 0;
while (*book) {
n++;
book++;
}
return n;//찐 책의 갯수는 n/4이다.
}//제법 열심히 풀어보려고 했는데 안 된다. 새로운 책을 더하는 부분에서 접근하는 방법을 모르겠다.
/*
문제 5
도서 관리 프로그램을 만들어봅시다. 프로그램에는 다음과 같은 기능들이 구현되어 있어야 합니다. (난이도 : 上)
책을 새로 추가하는 기능 (책의 총 개수는 100 권이라 하자. 이 때, 각 책의 정보는 제목, 저자의 이름, 출판사로 한다)
책의 제목을 검색하면 그 책의 정보가 나와야 한다.
위와 마찬가지로 저자, 출판사 검색 기능이 있어야 한다.
책을 빌리는 기능.
책을 반납하는 기능
프로그램 만들기 일단 각 도서별 제목 저자 이름 출판사이므로 배열을 2차원으로 만들어서 책을 저장하자. book[100][4]이런식으로 책
제목,지은이 출판사 대출여부
만들 함수 : 1. 누르면 책 추가 2: 책 검색 3: 출판사 검색 4. 책 빌리기 5. 책 반납
1: 배열에 책을 추가하는 방법 현재까지 몇개가 차있는지 알아야하고 즉 배열의 갯수 먼저 두번째로 그 다음칸에 정보를 3개를 입력해야한다.
2. 책 검색 :검색을 book[][0]중에서 하도록 해야한다.
3. 출판사 검색 book[][2] 에서 해야됨
4. 책을 빌리는 기능은 그 책을 검색해서 그게 몇번째 있는지 알아보고 대출가능 여부를 바꾼다.
*/
#include<stdio.h>
int new_book(char(* book)[4],int *n);//리턴값 0
int find_bookname(char(*book)[4]);//리턴값 책이 몇번째 있는지 num
int find_bookpubilsher(char(*book)[4]);//리턴값 역시 책이 몇번째 있는지 num
int book_borrow(char(*book)[4]);//책의 이름을 받아서 대출 가능상태: 1 불가능 상태: 0
//int booknum(char(*book)[4]);
int main() {
char book[100][4];
int n;
int num = 1;//책의 숫자 num-1이다.
for(;;){
printf("1. 책을 추가하기\n2. 책이름 검색하기\n3. 출판사로 검색하기\n4. 책 빌리기\n5. 책 반납하기\n다른키를 누르면 프로그램은 종료\n");
scanf("%d",&n);
switch (n) {
case 1: new_book(book,&num);
break;
case 2:
find_bookname(book);
break;
case 3:
find_bookpubilsher(book);
break;
case 4:
book_borrow(book);
break;
case 5:
book_borrow(book);
break;
default:
return 0;
}
}
return 0;
}
int new_book(char(*book)[4],int *n) {
//int num = booknum(book);
//if (num== 0) { num = 1; }
printf("추가할 책의 이름을 입력하세요");
scanf("%s",&book[*n-1][0]);
printf("추가할 책의 지은이를 입력하세요");
scanf("%s",&book[*n- 1][1]);
printf("추가할 책의 출판사를 입력하세요");
scanf("%s",&book[*n - 1][2]);
printf("추가할 책의 갯수를 입력하세요");
scanf("%d",&book[*n - 1][3]);
*n+=1;
return 0;
}
int find_bookname(char(*book)[4]) {
return 0;
}
int find_bookpubilsher(char(*book)[4]) {
return 0;
}
int book_borrow(char(*book)[4]) {
return 0;
}
//int booknum(char(*book)[4]) {
// int n = 0;
// while (*book) {
// n++;
// book++;
//
// }
// return n;//찐 책의 갯수는 n/4이다.
//}
//이정도면 제법 괜찮다.
사실상 책을 추가하는건 되게 쉬운데 책을 검색하는 기능이 매우 어렵다.
nt find_bookname(char(*book)[4]) {
int i = 0;
char *tmpbook;
printf("찾고싶은 책의 제목을 입력하세요");
scanf("% s",&tmpbook);
while (*book) {
if (book[i][0] == *tmpbook) {
printf("%s",*tmpbook);
}
i++;
}
return 0;
}//나는 이렇게 구현했었는데 역시 잘 되지 않았다. 이게 안된다는건 이전 강의에서 들었던 것 같긴한데
//그러면 어떻게 하라는거야?
/*
문제 5
도서 관리 프로그램을 만들어봅시다. 프로그램에는 다음과 같은 기능들이 구현되어 있어야 합니다. (난이도 : 上)
책을 새로 추가하는 기능 (책의 총 개수는 100 권이라 하자. 이 때, 각 책의 정보는 제목, 저자의 이름, 출판사로 한다)
책의 제목을 검색하면 그 책의 정보가 나와야 한다.
위와 마찬가지로 저자, 출판사 검색 기능이 있어야 한다.
책을 빌리는 기능.
책을 반납하는 기능
프로그램 만들기 일단 각 도서별 제목 저자 이름 출판사이므로 배열을 2차원으로 만들어서 책을 저장하자. book[100][4]이런식으로 책
제목,지은이 출판사 대출여부
만들 함수 : 1. 누르면 책 추가 2: 책 검색 3: 출판사 검색 4. 책 빌리기 5. 책 반납
1: 배열에 책을 추가하는 방법 현재까지 몇개가 차있는지 알아야하고 즉 배열의 갯수 먼저 두번째로 그 다음칸에 정보를 3개를 입력해야한다.
2. 책 검색 :검색을 book[][0]중에서 하도록 해야한다.
3. 출판사 검색 book[][2] 에서 해야됨
4. 책을 빌리는 기능은 그 책을 검색해서 그게 몇번째 있는지 알아보고 대출가능 여부를 바꾼다.
*/
#include<stdio.h>
int add_book(char(*bookname)[30],char(*authname)[30],
char(*publ_name)[30],int *borrow ,int *num_totalbook);
int find_bookname(char(*bookname)[30], char(*authname)[30],
char(*publ_name)[30], int* borrow, int* num_totalbook);
int book_borrow(char(*bookname)[30], char(*authname)[30],
char(*publ_name)[30], int* borrow, int* num_totalbook);
int main() {
char bookname[100][30];//책의 이름 보관
char authname[100][30];//작가의 이름 보관
char publ_name[100][30];//출판사 이름 보관
int borrowed[100];//지금 책이 몇권있는지 표기
int user_choice;//유저가 선택한 번호
int totalbook=0;//지금 배열에 있는 책의 총 숫자.
while(1){
printf("1. 책을 추가하기\n2. 책 검색하기\n3. 책 빌리기\n4. 책 반납하기\n다른키를 누르면 프로그램은 종료\n");
scanf("%d",&user_choice);
switch (user_choice) {
case 1: add_book(bookname,authname,publ_name,borrowed,&totalbook);
break;
case 2:
find_bookname(bookname, authname, publ_name, borrowed, &totalbook);
break;
case 3:
book_borrow(bookname, authname, publ_name, borrowed, &totalbook);
break;
case 4:
book_borrow(bookname, authname, publ_name, borrowed, &totalbook);
break;
default:
return 0;
}
}
return 0;
}
int add_book(char(*bookname)[30], char(*authname)[30],
char(*publ_name)[30], int* borrow, int* num_totalbook){
printf("추가할 책의 이름을 입력하세요");
scanf("%s",bookname[*num_totalbook]);
printf("추가할 책의 지은이를 입력하세요");
scanf("%s", authname[*num_totalbook]);
printf("추가할 책의 출판사를 입력하세요");
scanf("%s", publ_name[*num_totalbook]);
printf("추가할 책의 갯수를 입력하세요");
scanf("%d", borrow+*num_totalbook);
printf("추가 완료!!\n");
(*num_totalbook)++;
return 0;
}
int find_bookname(char(*bookname)[30], char(*authname)[30],
char(*publ_name)[30], int* borrow, int* num_totalbook) {
int choice;
char name[30];//입력 칸
printf("1. 책 제목으로 찾기\n2. 책 출판사로 찾기\n3. 지은이로 찾기\n");
scanf("%d", &choice);
switch (choice) {
case 1: //이렇게 만들어도 되지만
printf("찾고싶은 책의 제목을 입력하세요");
scanf("%s",name);
for (int i = 0; i < *num_totalbook; i++) {
if (bookname[i][0] == name[i]) {
for (int i1 = 0; i1 < 30; i1++) {
if (bookname[i][i1] == name[i1]) {
if (i1 == 29) {
printf("같은 책이 있다.\n");
printf("책의 제목은%s\n", bookname[i]);
printf("책 출판사는 %s\n", publ_name[i]);
printf("책의 지은이는:%s\n", authname[i]);
}
}
else {
break;
}
}
}
}
printf("같은 책이 없다.");
break;
case 2:
printf("출판사 이름을 입력해주세요 ");
scanf("%s", name);
break;
case 3:
printf("지은이를 입력해주세요");
scanf("%s", name);
break;
}
return 0;
}
/*
int compare(char *str1, char *str2) {
while (*str1) {
if (*str1 != *str2) {
return 0;
}
str1++;
str2++;
}
if (*str2 == '\0') return 1;
return 0;
이 비교함수를 이용해서 두개의 문자열이 같은지 비교하는게 더 코드가 깔끔해진다.
if (compare(book_name[i], user_search))이걸 사용해서 아에 코드를 깔끔하게 다음에도 쓸 수 있게 만드는거다.
}*/
int book_borrow(char(*bookname)[30], char(*authname)[30],
char(*publ_name)[30], int* borrow, int* num_totalbook) {
return 0;
}//이렇게 강의를 참고해서 만들었다. 사실 다른 부분은 쉬워서 굳이 만들지 않았기에 모범답안도 밑에
//적어놓겠다
#include <stdio.h>
int add_book(char (*book_name)[30], char (*auth_name)[30],
char (*publ_name)[30], int *borrowed, int *num_total_book);
int search_book(char (*book_name)[30], char (*auth_name)[30],
char (*publ_name)[30], int num_total_book);
int compare(char *str1, char *str2);
int borrow_book(int *borrowed);
int return_book(int *borrowed);
int main() {
int user_choice; /* 유저가 선택한 메뉴 */
int num_total_book = 0; /* 현재 책의 수 */
/* 각각 책, 저자, 출판사를 저장할 배열 생성. 책의 최대 개수는 100 권*/
char book_name[100][30], auth_name[100][30], publ_name[100][30];
/* 빌렸는지 상태를 표시 */
int borrowed[100];
while (1) {
printf("도서 관리 프로그램 \n");
printf("메뉴를 선택하세요 \n");
printf("1. 책을 새로 추가하기 \n");
printf("2. 책을 검색하기 \n");
printf("3. 책을 빌리기 \n");
printf("4. 책을 반납하기 \n");
printf("5. 프로그램 종료 \n");
printf("당신의 선택은 : ");
scanf("%d", &user_choice);
if (user_choice == 1) {
/* 책을 새로 추가하는 함수 호출 */
add_book(book_name, auth_name, publ_name, borrowed, &num_total_book);
} else if (user_choice == 2) {
/* 책을 검색하는 함수 호출 */
search_book(book_name, auth_name, publ_name, num_total_book);
} else if (user_choice == 3) {
/* 책을 빌리는 함수 호출 */
borrow_book(borrowed);
} else if (user_choice == 4) {
/* 책을 반납하는 함수 호출 */
return_book(borrowed);
} else if (user_choice == 5) {
/* 프로그램을 종료한다. */
break;
}
}
return 0;
}
/* 책을 추가하는 함수*/
int add_book(char (*book_name)[30], char (*auth_name)[30],
char (*publ_name)[30], int *borrowed, int *num_total_book) {
printf("추가할 책의 제목 : ");
scanf("%s", book_name[*num_total_book]);
printf("추가할 책의 저자 : ");
scanf("%s", auth_name[*num_total_book]);
printf("추가할 책의 출판사 : ");
scanf("%s", publ_name[*num_total_book]);
borrowed[*num_total_book] = 0; /* 빌려지지 않음*/
printf("추가 완료! \n");
(*num_total_book)++;
return 0;
}
/* 책을 검색하는 함수 */
int search_book(char (*book_name)[30], char (*auth_name)[30],
char (*publ_name)[30], int num_total_book) {
int user_input; /* 사용자의 입력을 받는다. */
int i;
char user_search[30];
printf("어느 것으로 검색 할 것인가요? \n");
printf("1. 책 제목 검색 \n");
printf("2. 지은이 검색 \n");
printf("3. 출판사 검색 \n");
scanf("%d", &user_input);
printf("검색할 단어를 입력해주세요 : ");
scanf("%s", user_search);
printf("검색 결과 \n");
if (user_input == 1) {
/*
i 가 0 부터 num_total_book 까지 가면서 각각의 책 제목을
사용자가 입력한 검색어와 비교하고 있다.
*/
for (i = 0; i < num_total_book; i++) {
if (compare(book_name[i], user_search)) {
printf("번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s \n", i,
book_name[i], auth_name[i], publ_name[i]);
}
}
} else if (user_input == 2) {
/*
i 가 0 부터 num_total_book 까지 가면서 각각의 지은이 이름을
사용자가 입력한 검색어와 비교하고 있다.
*/
for (i = 0; i < num_total_book; i++) {
if (compare(auth_name[i], user_search)) {
printf("번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s \n", i,
book_name[i], auth_name[i], publ_name[i]);
}
}
} else if (user_input == 3) {
/*
i 가 0 부터 num_total_book 까지 가면서 각각의 출판사를
사용자가 입력한 검색어와 비교하고 있다.
*/
for (i = 0; i < num_total_book; i++) {
if (compare(publ_name[i], user_search)) {
printf("번호 : %d // 책 이름 : %s // 지은이 : %s // 출판사 : %s \n", i,
book_name[i], auth_name[i], publ_name[i]);
}
}
}
return 0;
}
int compare(char *str1, char *str2) {
while (*str1) {
if (*str1 != *str2) {
return 0;
}
str1++;
str2++;
}
if (*str2 == '\0') return 1;
return 0;
}
int borrow_book(int *borrowed) {
/* 사용자로 부터 책번호를 받을 변수*/
int book_num;
printf("빌릴 책의 번호를 말해주세요 \n");
printf("책 번호 : ");
scanf("%d", &book_num);
if (borrowed[book_num] == 1) {
printf("이미 대출된 책입니다! \n");
} else {
printf("책이 성공적으로 대출되었습니다. \n");
borrowed[book_num] = 1;
}
return 0;
}
int return_book(int *borrowed) {
/* 반납할 책의 번호 */
int num_book;
printf("반납할 책의 번호를 써주세요 \n");
printf("책 번호 : ");
scanf("%d", &num_book);
if (borrowed[num_book] == 0) {
printf("이미 반납되어 있는 상태입니다\n");
} else {
borrowed[num_book] = 0;
printf("성공적으로 반납되었습니다\n");
}
return 0;
}
이 글은 코딩 꼬꼬마 시절에 푼 문제를 보관한 글로 네이버에 저장해둔 글을 옮긴 글입니다.
혹시나 참고하시는 부분에 이상한 부분이나 질문이 생긴다면 남겨주시면 친절히 답변 드리겠습니다.
728x90
'초기 네이버 기록 > 과거 공부 기록' 카테고리의 다른 글
합병정렬 (0) | 2023.01.08 |
---|---|
도서관리 프로그램 구조체 활용버전 씹어먹는 C언어 (2) | 2023.01.07 |
공부기록 문자열 (씹어먹는 C언어)(scanf함수에서 띄어쓰기 해결 ,화면 출력함수 변환문자 제어문자) (0) | 2023.01.07 |
다시 천천히 -씹어먹는 C언어 에라토스테네스의 체 예제 + 계산기 예제 (0) | 2023.01.07 |
배운것 기록 + 유클리드 호제법 문제 (씹어먹는 C언어) (2) | 2023.01.07 |