C언어로 문자열을 입력받아 그 문자열이 숫자인지? 문자인지? 혹은 둘 다인지를 구분하는 프로그램을 만들고 있습니다.
제가 만들려고 하는 방식은 문자열의 첫글자가 문자인지, 숫자인지 확인을 한 후 그 뒤의 문자열들이 첫글자와 같은지를 확인해서 결과값을 나타내려고 합니다.
아래는 제가 생각한 방식을 소스로 표현한 것입니다.
보기 어렵더라도 양해 부탁드립니다.
문제점은 hello 입력시 hello is String, 1234 입력시 1234 is Number, 123Hello 입력시 123Hello is Number+String으로 결과값이 정상 출력되지만
12345hello 처럼 12345같이 4글자 정도 이상이 입력되면 12345hello is Number로 출력됩니다.
바닥에 가까운 지식으로 왜 그런지 유추도해보고 수정도 해봤지만 답이 나오지 않아 도움 부탁드리고자 합니다.
문제점을 알려주신다면 수정하기 위해 노력하겠지만, 혹 이 프로그램에 다른 적합한 방식이 있다면 아이디어를 주시면 감사하겠습니다.
#include <stdio.h>
#include <string.h>
int check(char *text);
int check_num(char text);
int check_str(char text);
void main() {
char input[50];
int str=0;
scanf("%s", input);
//printf("%s\n", input);
str=check(input);
if(str==1) printf("%s is Number.\n", input);
else if(str==2) printf("%s is String.\n", input);
else printf("%s is Number+String\n", input);
}
int check(char *text) {
int i, a[2];
for(i=0; i<sizeof(text)/sizeof(text[0]); i++) {
//for(i=0; i<strlen(text); i++) {
if(check_num(text[i])==1) {
if(i==0) {
a[0]=1;
} else {
if(text[i]>=48 && text[i]<=57) {
a[1]=1;
} else {
a[1]=0;
}
}
}
else if(check_str(text[i])==1) {
if(i==0) {
a[0]=2;
} else {
if(text[i]>=65 && text[i]<=122) {
a[1]=2;
} else {
a[1]=0;
}
}
}
}
if(a[0]==a[1]) return a[0];
return 3;
}
int check_num(char text) {
if(text>=48 && text<=57)
return 1;
else
return 0;
}
int check_str(char text) {
if(text>=65 && text<=122)
return 1;
else
return 0;
}