주소값을 리턴받았을 때 출력방법
글쓴이: chavi55 / 작성시간: 월, 2019/09/16 - 4:50오전
difference(차집합 만드는 함수)에서 주소값c를 리턴받는데 이를 어떻게 main함수에서 출력해야할지 모르겠습니다.
복붙하니까 탭키가 안되네요 죄송합니다.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 5
typedef struct {
int nElements;
int arraySize;
char **element;
} strset_t;
strset_t *createSet(char *element)
{
strset_t *s = (strset_t *)malloc(sizeof(strset_t));
s->element = (char **)malloc(sizeof(char *)*maxsize);
s->nElements = 0;
s->arraySize = maxsize;
return s;
}
int addElement(char *x, strset_t *a)
{
if(a->arraySize == a->nElements)
{
a->arraySize = a->arraySize * 2;
a = realloc(a, a->arraySize);
}
if(isElement(x, a) == 1)
return 0;
if(a->element == '\0')
return 0;
a->element[a->nElements] = (char *)malloc(strlen(x) + 1);
strcpy(a->element[a->nElements], x);
a->nElements++;
return 1;
}
int removeElement(char *x, strset_t *a)
{
int value = isElement(x, a);
if(value == -1)
return 0;
for(int i = value; i < a->nElements - 1; i++)
{
free(a->element[i]);
a->element[i] = a->element[i + 1];
}
free(a->element[a->nElements - 1]);
a->nElements--;
}
strset_t *intersection(strset_t *a, strset_t *b)
{
int cnt = 0, k = 0;
strset_t *c;
c = createSet(c);
for(int i = 0; i < a->nElements; i++)
{
for(int j = 0; j < b->nElements; j++)
{
if(strcmp(a->element[i], b->element[j]) == 0)
cnt++;
}
}
for(int i = 0; i < a->nElements; i++)
{
for(int j = 0; j < b->nElements; j++)
{
if(strcmp(a->element[i], b->element[j]) == 0)
{
c->element[k] = a->element[i];
k++;
continue;
}
}
}
return c;
}
strset_t *unio(strset_t *a, strset_t *b)
{
int cnt = 0, k = 0;
char *kyo;
strset_t *c;
c = createSet(c);
kyo = intersection(a, b);
cnt = a->nElements + b->nElements;
for(int i = 0; i < a->nElements; i++)
{
for(int j = 0; j < b->nElements; j++)
{
if(strcmp(a->element[i], b->element[j]) == 0)
cnt++;
}
}
for(int i = 0; i < a->nElements; i++)
{
c->element[k] = a->element[i];
k++;
}
for(int j = 0; j < cnt; j++)
{
removeElement(kyo[j], c);
}
for(int i = 0; i < b->nElements; i++)
{
c->element[k] = b->element[i];
k++;
}
return c;
}
strset_t *difference(strset_t *a, strset_t *b)
{
int cnt = 0, k = 0;
char *kyo;
strset_t *c;
c = createSet(c);
kyo = intersection(a, b);
cnt = a->nElements + b->nElements;
for(int i = 0; i < a->nElements; i++)
{
for(int j = 0; j < b->nElements; j++)
{
if(strcmp(a->element[i], b->element[j]) == 0)
cnt++;
}
}
for(int i = 0; i < a->nElements; i++)
{
c->element[k] = a->element[i];
k++;
}
for(int i = 0; i < b->nElements; i++)
{
c->element[k] = b->element[i];
k++;
}
for(int j = 0; j < cnt; j++)
{
removeElement(kyo[j], c);
}
return c;
}
int main()
{
strset_t *s1, *s2, *s3;
char word;
char str[100];
int num;
s1 = createSet(s1);
s2 = createSet(s2);
s3 = createSet(s3);
difference(a, b);//c안에 있는 내용을 어떻게 출력하죠
}
}
}Forums:


code 태그 안에 소스 코드를 붙여 넣으면 들여쓰기 됩니다.
code 태그 안에 소스 코드를 붙여 넣으면 들여쓰기 됩니다.
https://kldp.org/node/158191
세벌 https://sebuls.blogspot.kr/
출력이 문제가 아니라, 코드가 뭔가 엉망진창인데요.
출력이 문제가 아니라, 코드가 뭔가 엉망진창인데요.
위에서부터 읽다가
a = realloc(a, a->arraySize);까지 보고 포기했습니다.혹시 오프라인에서 도움을 청할 사람이 있나요? (학교/학원 선생님이라던지, 대학 강의 조교라던지)
그렇지 않다면 굉장히 친절한 답변자를 찾아야 할 거에요..
댓글 달기