掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23888

00194735468のようなデータを数字かどうか判断するには
投稿者---とおる(2005/10/31 01:31:14)


こんにちは。
いつもはVBを使っています。

00194735468のようなデータを数字かどうか判断するには
どのようにすれば良いのでしょうか。

VBでは、データを分割してIsNumericなどで一気に判断できる
のですが、C言語での判断の仕方が解りません。
isdigitやアスキーコードでの判断があるみたいですが、良く
解りません。
(実はサイトでも色々と調べたのですが、コレというものがなくて)

サンプルとなるコードを教えて頂けないでしょうか。

宜しくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:00194735468のようなデータを数字かどうか判断するには 23889 Blue 2005/10/31 02:17:38


No.23889

Re:00194735468のようなデータを数字かどうか判断するには
投稿者---Blue(2005/10/31 02:17:38)


> サンプルとなるコードを教えて頂けないでしょうか。

数値のみの文字列かどうかを判定する。
符号や小数点の考慮はしていません。

#include <ctype.h> int IsNumeric( const char* p ) { while ( *p ) { if ( !isdigit( *p++ ) ) { return 0; } } return 1; }



この投稿にコメントする

削除パスワード

No.23890

Re:00194735468のようなデータを数字かどうか判断するには
投稿者---Blue(2005/10/31 02:26:16)


関連スレ
文字列から文字の抽出方法



この投稿にコメントする

削除パスワード

No.23897

Re:00194735468のようなデータを数字かどうか判断するには
投稿者---とおる(2005/10/31 17:48:03)


こんにちは。
Blueさん、ありがとうございます。

もう一つお聞きしたいのですが...。
教えて頂いた「文字列から文字の抽出方法」を読ん
でいたのですが、ピンと来なくて...。
不勉強ですみません。

ポインタで全件回しているとき、その文字の前後を
見て英数字であれば0x20に変換するというコードの
場合どのようにすれば良いのでしょうか?

教えて頂いたロジックから、このロジックを考えて
みたんですが...。
何か間違っているような気がして...。

#include <ctype.h>

int IsNumeric2( const char* p )
int i=0 ;
{
while (*p)
{
if(i!= 0)
{
if((isalnum(*(p-1))==0) && (isalnum(*(p+1))==0))
{
*p=0x20;
}
}
i++;
}
}

*(p-1)や*(p+1)でポインタがズレるような気がして。
実際、上のコードは間違っていると思うのですが、
サンプルとなるコードを教えて頂けないでしょうか。

お願いばかりで申し訳ございません。
宜しくお願い申し上げます。


この投稿にコメントする

削除パスワード

No.23898

Re:00194735468のようなデータを数字かどうか判断するには
投稿者---Blue(2005/10/31 17:57:29)


仕様がよくわからないですが。
> その文字の前後を
> 見て英数字であれば0x20に変換するというコードの
> 場合どのようにすれば良いのでしょうか?

S-JISの場合
"A1B"   ---> "A B"   ("\x41\x20\x42")
"111"   ---> "1 1"   ("\x31\x20\x31")
"11@"   ---> "11@"   ("\x31\x31\x40")
"12345" ---> "1   5" ("\x31\x20\x20\x20\x35")
"12@45" ---> "12@45" ("\x31\x33\x40\x34\x35")
ということ?



この投稿にコメントする

削除パスワード

No.23900

Re:00194735468のようなデータを数字かどうか判断するには
投稿者---Blue(2005/10/31 18:27:17)


> "12@45" ---> "12@45" ("\x31\x33\x40\x34\x35")
は間違いでした。
"12@45" ---> "12 45" ("\x31\x33\x20\x34\x35")

デバッガ(VC6)でしか見てないからprintf文とかないです。↓

#include <ctype.h> #include <stdlib.h> #include <string.h> char* ChangeStr( char* str ) { char *p = str; char *prev, *next; char buff[ 256 ]; int index = 0; prev = NULL; while ( *p ) { next = p + 1; if ( prev && isalnum( *prev ) && isalnum( *next ) ) { buff[ index ] = 0x20; } else { buff[ index ] = *p; } prev = p++; index++; } buff[ index ] = '\0'; strcpy( str, buff ); return str; } int main( void ) { char s[] = "A1B"; ChangeStr( s ); return 0; }



この投稿にコメントする

削除パスワード

No.23901

Re:00194735468のようなデータを数字かどうか判断するには
投稿者---Blue(2005/10/31 22:12:14)


もう少しスマートにしてみました。

char* ChangeStr( char* str ) { char *p = str; char temp = '\0'; while ( *p ) { if ( isalnum( temp ) && isalnum( *( p + 1 ) ) ) { temp = *p; *p = 0x20; } else { temp = *p; } p++; } return str; }



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧