문자열 분석 로직
문자열에 포함된 알파벳, 숫자, 특수 문자의 개수를 세는 핵심 아이디어는 간단합니다. 문자열을 처음부터 끝까지 한 글자씩 검사하면서 각 문자가 어느 범주에 속하는지 판별하고, 그때마다 해당 카운터를 증가시키면 됩니다.
for(number=0; string[number]!='\0'; number++) { // 문자열 끝(널 문자)까지 반복
if((string[number]>='a' && string[number]<='z') ||
(string[number]>='A' && string[number]<='Z')) {
alphabets++; // 알파벳 카운트
}
else if(string[number]>='0' && string[number]<='9') {
digits++; // 숫자 카운트
}
else {
special++; // 특수 문자 카운트
}
}
이 로직의 판별 기준은 다음과 같습니다.
- 알파벳: 문자가 'a'~'z' 또는 'A'~'Z' 범위에 속하면 알파벳으로 계산합니다.
- 숫자: 문자가 '0'~'9' 범위에 속하면 숫자로 계산합니다.
- 특수 문자: 위 두 조건에 모두 해당하지 않는 나머지 문자(공백, 기호 등)는 특수 문자로 계산합니다.
전체 예제 프로그램
다음은 사용자로부터 문자열을 입력받아 알파벳, 숫자, 특수 문자의 총 개수를 각각 출력하는 완전한 C 프로그램입니다.
#include<stdio.h>
#include<ctype.h>
void main(){
// 개수 계산용 변수와 문자열 선언 //
int number;
char string[50];
int alphabets=0;
int digits=0;
int special=0;
// 사용자 입력 받기 //
printf("Enter the string :");
gets(string);
for(number=0; string[number]!='\0'; number++){
if((string[number]>='a' && string[number]<='z') ||
(string[number]>='A' && string[number]<='Z')){
alphabets++;
}
else if(string[number]>='0' && string[number]<='9'){
digits++;
}
else{
special++;
}
}
// 결과 출력 //
printf("The number of alphabets in the string is : %d\n",alphabets);
printf("The number of digits in the string is : %d\n",digits);
printf("The number of special characters in the string is : %d\n",special);
}
실행 결과
예를 들어 "Hello World! 123"이라는 문자열을 입력하면 다음과 같이 각 범주의 개수가 출력됩니다.
Enter the string :Hello World! 123 The number of alphabets in the string is : 10 The number of digits in the string is : 3 The number of special characters in the string is : 4
알파벳 10개(H, e, l, l, o, W, o, r, l, d), 숫자 3개(1, 2, 3), 그리고 공백 3개와 느낌표 1개를 합쳐 특수 문자 4개로 정확히 집계된 것을 확인할 수 있습니다.
추가 팁
ctype.h 헤더에 포함된 표준 함수인 isalpha()와 isdigit()을 사용하면 조건식을 더 간결하고 가독성 좋게 작성할 수 있습니다. 또한 gets() 함수는 버퍼 오버플로우 보안 취약점 때문에 C11 표준에서 제거되었으므로, 실제 프로젝트에서는 크기를 지정할 수 있는 fgets() 사용을 권장합니다.