문자열을 입력받고, 문자의 빈도수 계산하여 출력하기2015. 5. 29. 17:12
문자열을 입력받고, 문자의 빈도수를 계산하여 출력해보자!
1. 문자열을 입력받는다 (스페이스바포함)
2. a~z 까지 문자를 저장한다
3. 1개씩 문자를 비교하여 문자와 같아면, 값을 1씩 증가시킨다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <stdio.h> #include <string.h> void main() { char str[100]; //입력받는 문자열 char alpa[30]; //문자 a~z 저장 int temp[30] = {0, }; //빈도수 저장 int!! int count = 0; char* Return; for(int i=0; i<25; ++) apla[i] = i+97; fgets(str, strlen(str), stdio); /* 개행삭제 */ if( (Return = strchr(str, '\n')) != NULL) *Return = '\0'; for(int i=0; i<25; i++) //알파벳 for문 { for(int k=0; k<strlen(str); k++) //문자열 for문 { if(str[k] == alpa[i]) temp[i] = ++count; } count = 0; } for (i = 0; i < 25; i++) printf("%c : %d\n", alpa[i], temp[i]); } | cs |
영어는 26개 까지 있지만 넉넉하게 30으로 잡았습니다.
alpa 배열과 temp 배열의 개수가 똑같게 잡았습니다
영어 문자에 따라 빈도수를 저장하기 때문입니다.
1.
for(int i=0; i<25; ++)
apla[i] = i + 97;
이 부분을 보시면,
i 를 0 부터 시작하게 해서 문자를 순서대로 저장합니다.
cf. 소문자 a 는 아스키코드표를 참조하시면 97 부터 시작합니다
0 + 97 = 97 'a'
1 + 97 = 98 'b'
2 + 97 = 99 'c'
.
.
2. 개행 삭제
if( (Return = strchr(str, '\n')) != NULL)
*Return = '\0';
출처 : http://ra2kstar.tistory.com/173
strchr 은 매개변수 str을 참조하여 두번째 매개변수 '\n' 이 들어가있는 곳을 찾아서 반환합니다.
만약 없다면 NULL 을 반환하므로, 맨 마지막 '\n' 을 Return 에 저장합니다.
그리고 개행 부분에는 NULL을 넣어줍니다.
이 문장은 str[strlen(str) - 1] = '\0' 과 같습니다.
'Language > C++' 카테고리의 다른 글
[C++] 싱글톤에 대한 정리 (0) | 2015.09.02 |
---|---|
[C++] 함수로 주소값 전달하는 방법 (0) | 2015.08.25 |
문자열의 숫자을 더하고 출력하기 (0) | 2015.05.29 |
단어를 입력받고, 사전 순서대로 출력하기 (0) | 2015.05.29 |
다양한 종류의 포인터 정리 (0) | 2015.05.29 |