#pragma warning(disable:4996)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
struct StringArray {
char* s[100];
int count;
};
void FreeStringArray(StringArray* psa) { // 동적 할당 풀기
for (int i = 0; i < psa->count; i++)
free(psa->s[i]);
}
void PrintStringArray(StringArray* psa) {
for (int i = 0; i < psa->count; i++)
printf("[%d] : %s\n", i, psa->s[i]);
}
void InputBuffer(char* buf, int size) {
printf("문자열 입력: ");
gets_s(buf, size);
}
int IsExit(const char* buf) { // 왜 const 넣어야함?????????? 왜??????¿¿¿¿¿¿¿¿¿¿¿
return strcmp("exit", buf) == 0;
}
void AddStringArray(StringArray* psa, const char* buf) {
psa->s[psa->count] = (char*)malloc(strlen(buf) + 1);
strcpy(psa->s[psa->count], buf);
psa->count++;
}
void PrintMenu() {
printf("1. 문자열 입력\n");
printf("2. 문자열 출력\n");
printf("3. 문자열 검색\n");
printf("4. 문자열 삭제\n");
printf("0. 프로그램 종료\n");
}
void FindStringArray(StringArray* psa, const char* buf) {
for (int i = 0; i < psa->count; ++i) {
if (strcmp(psa->s[i], buf) == 0) {
printf("찾은 문자열의 index : %d\n", i);
}
}
}
void DeleteStringArray(StringArray* psa, int num) {
psa->s[num] = psa->s[psa->count - 1];
psa->count--;
}
int main() {
struct StringArray sa;
sa = { 0 };
sa.count = 0;
int run = 1;
int num = 0;
while (run) {
PrintMenu();
switch (_getch()) {
case '1':
{
char buf[1000];
InputBuffer(buf, 1000);
AddStringArray(&sa, buf);
break;
}
case '2':
{
PrintStringArray(&sa);
break;
}
case'3':
{
char buf[1000];
printf("검색: ");
InputBuffer(buf, 1000);
FindStringArray(&sa, buf);
break;
}
case'4':
char buf[1000];
InputBuffer(buf, 1000);
FindStringArray(&sa, buf);
printf("삭제할 인덱스 입력: \n");
num = _getch() - '0';
printf("제거된 인덱스: %d\n", num);
DeleteStringArray(&sa, num);
break;
case '0':
run = 0;
break;
}
//char buf[1000];
//InputBuffer(buf, 1000);
//if (IsExit(buf))
// run = 0;
//else {
// AddStringArray(&sa, buf);
//}
}
//PrintStringArray(&sa);
FreeStringArray(&sa);
}