isalpha()関数について
isalpha()関数について
◆開発環境
OS:Linux(Ubuntu9.10)
コンパイラ:gcc4.4
IDE:eclipse
言語:C
《質問内容》
現在、char型配列A[8](最大8桁の文字列が格納されるため)に英字から始まる文字列(英字・数字)を入力し、
2文字目の文字を英字かどうか判別し、if文で分岐させようとしているのですが、
この2文字目の文字をisalpha()にかけても、英字と判別せず、思い通りの処理ができない状態で
困っています。
現状、以下のソースですと、"D0"ならelse ifに入りますが、"SM0"と入れるとifに入らずに、else ifに入ってしまいます。(2文字目は英字なのに…)
以下に、参考ソースを添付します。
どなたか、お分かりの方いらっしゃいましたら、ご教授お願いします。
できれば、isalphaの使い方等も詳しく教えていただけたら幸いです。(webで調べるとisalpha(int c)と書いてあり、文字の判別にint?とかなり疑問です。一応、ソース上ではchar型にキャストしてますが。)
《ソース》
char A[9]=""; //最大8桁の文字列(英字・数字)が入る
char B[3]=""; //A,B入れ替え用バッファ
char C[7]=""; //最大6桁の文字列(数字)が入る
char code[2]=""; //判別用バッファ
int C_val; //Cの10進値格納変数(後で使う)
fscanf(stdin,"%s",&A);
strncpy(code,,A+1,1); //code[2]に"0"をコピー
if( (unsigned char)isalpha(code) != 0){ //codeが英字なら先頭2文字は英字
strncpy(B,A,2);
strncpy(C,A+2,strlen(A)-2);
C_val=atoi(C); //Cの10進化
strcpy(A,""); //Aの初期化
strcpy(A,B);
strcpy(B,""); //Bの初期化
}
else if( (unsigned char)isalpha(code) == 0){ //codeが英字でないなら先頭1文字が英字
strncpy(B,A,1);
strncpy(C,A+1,strlen(A)-1);
C_val=atoi(C); //Cの10進化
strcpy(A,""); //Aの初期化
strcpy(A,B);
strcpy(B,""); //Bの初期化
}
お礼
助かりました。 本当に有難うございます。