여기나와있는 문제를 c로 해결하려고 하는 중인데요.
정리하자면, 공백으로 띄어쓰기가 되어있는 한 문장을 받은 다음에
그걸 단어 별로 나눠서 각각 단어가 몇번 씩 나와있는지 그 빈도와
이들을 알파벳 순으로 나열하는 것.
그렇다면 해야할 일은
1. 공백으로 띄어쓰기가 되어있는 문장을 공백이 포함되어 있으니 gets함수로 읽어온다.
2. 읽어온 내용들을 저장한다.
3. Sorting과정과 그리고 빈도 수 저장.
4. 마지막으로 결과를 프린트한다.
5. end가 나오기 전까지 반복
우선 제 코딩은 -->
#include <stdio.h>
#include <string.h>
void swap(char*,char*);
int main(void)
{
char clist[210];
int i;
int count = 0;
struct pair{ //숫자랑 스트링이랑 한몸처럼 움직여야 하니까
//구조체를 사용하는 게 좋을 것 같아 구조체를 사용하였습니다.
char word[20];
int number;
};
int temp;
struct pair result[20];
char * context = NULL;
gets_s(clist, sizeof(clist));
char * token = strtok_s(clist, " ", &context);
while (token != NULL)
{
strcpy_s(result[count].word,20, token);
result[count].number = 1;
count++;
i = count;
while (i>0 && strcmp(result[i].word,result[i-1].word)<=0) <<--------- 요기가 문제입니다 이녀석 while문이 안돌아가요ㅠㅠ
{
if (strcmp(result[i].word, result[i - 1].word) == 0)
{
count--;
result[i - 1].number++;
break;
}
printf("here"); <<---------- while문이 돌아가는지 안돌아가는지 알기위해서 이거 하나 넣어봤는
데 절대 print안되더라구요
swap(result[i].word, result[i - 1].word);
temp = result[i - 1].number;
result[i - 1].number = result[i].number;
result[i].number = temp;
i = i - 1;
}
token = strtok_s(NULL, " ", &context);
}
for (i = 0; i < count; i++)
{
printf("%s : %d\n", result[i].word, result[i].number);
}
}
void swap(char* a,char* b)
{
char* temp;
temp = *a;
*a = *b;
*b = temp;
}
여기에서 위에 **********로 표시한 while문이 안돌아가더라구요.
무슨 이유때문인지 혹시 알려주실분 계신가요?? ㅠㅠ
그냥 밖에서 문자열 a랑 b랑 비교하면 (ex strcmp(a,b) = -1)이 나오던데, 그렇다면 저 위의 코드에서
while문이 돌아가서 알파벳순으로 정리되어야 하는 거 아닌가요???
here문이 한번도 프린트 되지 않네요 어떻게 순서를 정해도 으으..
모르겠습니다 ㅠ
p.s 그리고 문제의 난이도에 비해? 코드가 너무 더러운 거 같은데.. 이 문제를 해결하는 접근법이 다를 수도 있나요??