#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct StringArray {
char* s[100];
int count;
};
void deleteSA(StringArray* psa, int index) {
// 삭제할 문자열 임시 저장
char temp[100];
strcpy(temp, psa->s[index]);
free(psa->s[index]);
// 문자열 위치 덮어쓰기 (마지막꺼 가져다 씀)
psa->count--;
psa->s[index] = psa->s[psa->count];
printf("[%d]번째 인덱스에 있는 문자열 %s를 제거하였습니다.\n", index, temp);
}
int searchSA(StringArray* psa, const char* buf) {
for (int i = 0; i < psa->count; i++) {
if (strcmp(buf, psa->s[i]) == 0) {
return i;
}
}
return -1;
}
void AddSA(StringArray* psa, const char* buf) {
psa->s[psa->count] = (char*)malloc(strlen(buf) + 1);
strcpy(psa->s[psa->count], buf);
psa->count++;
}
void InputBuffer(char* buf, int size) {
printf("문자열 입력 : ");
gets_s(buf, size);
}
void PrintSA(StringArray* psa) {
for (int i = 0; i < psa->count; i++) {
printf("string[%d] : %s\n", i, psa->s[i]);
}
}
void FreeSA(StringArray* psa) {
for (int i = 0; i < psa->count; i++) {
free(psa->s[i]);
}
}
void PrintMenu() {
printf("\n");
printf("1. 문자열 입력\n");
printf("2. 문자열 출력\n");
printf("3. 문자열 검색\n");
printf("4. 문자열 삭제\n");
printf("0. 프로그램 종료\n");
printf("\n");
}
int main() {
StringArray sa = { 0 };
int run = 1;
while (run) {
PrintMenu();
switch (_getch()) {
case '1': // 입력
{
char buf[1000];
InputBuffer(buf, 1000);
AddSA(&sa, buf);
break;
}
case '2': // 출력
{
PrintSA(&sa);
break;
}
case '3': // 검색
{
char buf[1000];
printf("검색 ");
InputBuffer(buf, 1000);
int index = searchSA(&sa, buf);
printf("찾은 문자열의 Index : %d\n", index);
break;
}
case '4': // 삭제
{
char buf[1000];
printf("삭제 ");
InputBuffer(buf, 1000);
int index = searchSA(&sa, buf);
deleteSA(&sa, index);
break;
}
case '0': // 종료
{
run = 0;
break;
}
}
}
FreeSA(&sa); // 메모리 해제
return 0;
}