문자열 관련해서 질문 좀 올립니다.
슬기
소스는 문장을 입력해서 단어가 몇개가 나왔는지 출력하는 소스코드인데 같은 단어가 중복해서 나온다면
중복되어 나오는게 아닌 그 단어 하나만 나오게 되는 코드인데요.#include stdio.h
#include ctype.h
#include string.h#define LINENUM 81int main()
{
char line[10][LINENUM];
int i = 0, j = 0, maxline = 0; int count = 0;
char *delimiter = ,.!?;
char *pword;
char *word[100];
int wordcnt[100] = {0}; printf(여러 줄에 원하는 문장을 입력하세요. );
printf(입력이 다 되었으면 \n);
printf(새로운 줄 처음에 ctrl+Z, 그리고 Enter를 입력 하세요. \n\n); while(gets(line[i])) //문장을 입력받음
{
line[i++]; //입력받은 문장을 배열에 저장
maxline++; //최대 문장 수 표시를 위한 변수
}
printf(\n); for(i=0; i maxline; i++) //문장 끝까지 다 읽음.
{
printf( %d줄에 입력한 문자열에서 토큰(단어) 출력 \n, i+1);
pword = strtok(line[i], delimiter); //NULL, ,, !, . 을 제외한 단어 출력
while(pword != NULL) //pword가 NULL이 아닐때(문장이 끊기지 않았을때)
{
if(count == 0)
{
printf(%s\n, pword);
word[count] = pword;
wordcnt[count++]++;
}
else
{
for(j=0; j count; j++)
if(strcmp(pword, word[j]) == 0)
{
wordcnt[j]++;
break;
}
if(j==count)
{
word[count] = pword;
wordcnt[count++]++;
}
}
pword = strtok(NULL, delimiter);
printf(%s\n, pword);
}
} printf(\n 새로운 단어와 수는 모두 %d개 입니다.\n\n, count);
for(i = 0; i count; i++)
printf(단어 %10s : %d회 출현 \n, word[i], wordcnt[i]); return 0;
}이 코드 부분에서 while(pword != NULL) //pword가 NULL이 아닐때(문장이 끊기지 않았을때)
{
if(count == 0)
{
printf(%s\n, pword);
word[count] = pword;
wordcnt[count++]++;
}
else
{
for(j=0; j count; j++)
if(strcmp(pword, word[j]) == 0)
{
wordcnt[j]++;
break;
}
if(j==count)
{
word[count] = pword;
wordcnt[count++]++;
}
}
pword = strtok(NULL, delimiter);
printf(%s\n, pword);
}
}이 부분이 count 변수로 문장을 출력해서 줄 수 별로 단어가 몇개가 나왔는지 세는 코드인데여기서 count가 어떻게 세어지는지에 대해 잘 이해를 못해서 이렇게 질문을 올려 봅니다.
-
가론
만약 abc, abc, bcd, abc라고 친다면
첫 번째 abc
word[0] == abc
wordcnt[0] == 1
두 번째 abc
j==0
word[j] == abc
wordcnt[j] == 2
세 번째 bcd
j == 1
count == 1
if 조건 참
word[count] == bcd
wordcnt[count++] == 1
참고. count++는 현재카운트 값(1)에 1을 증가시킨 후
count를 1증가 시킵니다. 즉 count는 2 -
텃골돌샘터
일단 strtok함수를 이용하여 단어들을 분리하죠
count=0이라는 소리는 처음 단어가 들어가기 때문에 중복이 될 경우가 없으므로
word[0] 배열에 단어를 넣고, wordcnt[0]를 1 증가시킵니다.
그 후 두번째 문자부터는 for문을 통해서 word배열안에 있는 단어와 pword단어를 비교합니다.
같을 경우에는 j를 통해서 wordcnt[j]값만 증가를 시키죠
즉, 첫번째, 두번째 단어가 같다면
j=0일 때 pword의 단어와 word[j
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2700484 | 두 개가 차이가 뭔지 알려주세요...(소수 찾는 프로그램) (2) | 날위해 | 2025-07-05 |
2700426 | 인터넷 창 띄우는 질문이요 (1) | 정훈 | 2025-07-04 |
2700400 | 원넓이를 계산이요 ㅜㅜ | 천칭자리 | 2025-07-04 |
2700368 | if에 관해서 질문이요... | Orange | 2025-07-04 |
2700339 | 이거 결과값이 왜이런건지.. (4) | 그댸와나 | 2025-07-04 |
2700313 | 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) | 크나 | 2025-07-03 |
2700287 | 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) | 아련나래 | 2025-07-03 |
2700264 | 문자와 숫자 동시에 입력??? | 글고운 | 2025-07-03 |
2700236 | txt파일로만 쓰고 읽게 하려면 어떻게 해야 하나요..?? (8) | 미국녀 | 2025-07-03 |
2700211 | 전위 연산자 (2) | 어른처럼 | 2025-07-02 |
2700183 | C에서 파일이름을 받고, 그 파일의 사이즈를 출력해줘야하는데 내용이 출력이 안되네요 ;ㅅ; | 피스케스 | 2025-07-02 |
2700150 | 꼭좀 도와주세요ㅠㅠㅠ | 호습다 | 2025-07-02 |
2700095 | 연산문제...질문... | 오빤테앵겨 | 2025-07-01 |
2700070 | while문 , 3의배수 출력하는 프로그램좀 짜주세욤. | 횃불 | 2025-07-01 |
2700041 | 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? | 헛장사 | 2025-07-01 |
2700012 | 배열// (1) | 전갈자리 | 2025-07-01 |
2699895 | 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) | 선아 | 2025-06-30 |
2699842 | 질문을 너무 많이 하네여.....죄송.... (2) | 해님꽃 | 2025-06-29 |
2699816 | 오류 질문입니다.. (1) | 해비치 | 2025-06-29 |
2699763 | 질문입니다 ! 꼭 좀 도와주세요ㅠㅠ (2) | 미라 | 2025-06-28 |