군대갔다 얼마전 전역하고 바로 복학한 놈인데 자료구조 첫수업부터 ㅂㄷㅂㄷ하고있음
문자열을 입력받아서 각 문자의 빈도를 출력하는 코드인데 자꾸 막힘.
#include <stdio.h>
#define STR_LEN 100
#define CHAR_CTR 128
#pragma warning( disable : 4996 )
void main()
{
int nAns[CHAR_CTR][2];
char strBuffer[STR_LEN];
while (1) {
void FreqString(char *, int[CHAR_CTR][2]);
void OutputResult(int[CHAR_CTR][2]);
printf("Input String: ");
gets(strBuffer); // 문자열을 입력
if (*strBuffer == NULL)
break;
FreqString(strBuffer, nAns); // 문자열에서 문자열의 출현빈도를 계산
OutputResult(nAns); // 문자들의 출현 결과를 출력한다.
}
printf("Bye, .... ");
}
int FindIndex(int nChar, int nCtr[CHAR_CTR][2], int nLastNdx)
{
for (int nNdx = 0; nLastNdx; nNdx++)
{
if (nChar == nCtr[nNdx][1])
return nCtr[nNdx][2];
}
nLastNdx++;
nCtr[nLastNdx][1] = nChar;
nCtr[nLastNdx][2] = 0;
return nCtr[nLastNdx][2];
// nCtr에 이미 출현한 nChar의 색인을 찾아 return 한다.
// 아직 출현하지 않았으면 다음 빈 곳의 색인을 return 한다.
}
void FreqString(char *str, int nCtr[CHAR_CTR][2])
{
int FindIndex(int nChar, int nCtr[CHAR_CTR][2], int nLastNdx);
int nLastNdx = -1;
for (int i = 0; str[i] == NULL; i++)
{
nCtr[i][2] = FindIndex(str[i], nCtr, nLastNdx); // str에서 출현하는 문자들의 빈도를 nCtr에 저장한다.
}
}
void OutputResult(int nCtr[CHAR_CTR][2])
{
for (int nNdx = 0; nNdx < CHAR_CTR; nNdx++)
{
if (nCtr[nNdx][1] == NULL || nCtr[nNdx][2] == 0)
break;
else
printf("%c: %d ", nCtr[nNdx][1], nCtr[nNdx][2]);
}
// 결과를 출력한다.
}
그래서 뭐어쩔? 그냥 군대장기하지 뭐하러나옴 ㅉㅉ 니같은놈은 대학다녀봣자 어짜피 상하차알바인생
[1] [2] 을 [0] [1] 로 바꿔요
빨간부분말고도 이해안가는부분이 꽤있는데 배열 선언을말이야.. 2차원으로 [2] 뒤에붙엿다고 접근을 [1][2]로 하냐?????????? [0][1]로 접근해야되는거 아니냐?
tra1n// 중단점 만들어서 보는 걸 잘 몰라서 그러는데, 중단점 만들고 그냥 실행해버리면 안 멈추고 가는건가요?
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 걍 접고 공무원공부 추천한다
변산댁// 빨간 부분의 [1] [2]를 [0], [1]로 바꾸어 보았지만 똑같은 현상이 발생합니다. 사실 이 코드도 복학생 일곱명이서 머리를 맞대 간신히 나온 코드인지라 대충밖에 이해가 안 되어있는 상태입니다. 무슨 이유로 [0] [1]로 바꾸어야 하겠다고 생각하셨습니까?
컴공4학년//단순히 교수님께서 [2] 뒤부터 붙이고 하라는 말을 하셔서.. 그렇게 안 해도 되는건가요
갓제대해서그런가 말투 어눌한거 보소 병신아 프로그래머될라면 니가될떄까지 해보는수밖없다 그래서 프로그래머들은 다 고집이 세지.
저도 코드가 어려워서 이해는 못했습니다. C언어 배열은 선언할 때 크기를 지정하고, 사용할 때는 번호를 적어주는데 번호가 0번 부터 크기-1 번 까지 있습니다.
tra1n//네 일단 해볼게요 감사합니다