関数化作業

kerotan0820
記事: 91
登録日時: 14年前

関数化作業

投稿記事 by kerotan0820 » 13年前

関数についても、むかしむかしよりは分かるようになりましたけど、ところどころ未だにつまずきますねえ...。

ところで、関数化は一体何処まですれば綺麗といえるのでしょうか

今こういう状態です。

CODE:

/*********************ヘッダー**********************/
#include
#include 

/*********************プロトタイプ宣言********************/
void print_data(char *data1, char *data2, char *data3);		//データの表示関数
void add_shutan(char *data1, char *data2, char *data3, int x, int y, int z);		//終端文字の


int main(void)
{
	/***********************変数の宣言**********************/

	char str[50]={0},Emoji[50],Nmoji[50],Elsemoji[50];
	char *x;
	int i=0,j=0,k=0,h=0,len=0;


	scanf(" %s",str);										//入力された文字列を保存
	x = str;
	
	while( *x != '\0')										//終端文字出ない限りループ
	{
//		printf(" x の実態は %c(文字) %d(10進) %x(16進)\n",*x,*x,*x);

		if((*x >= '0') && (*x = 'A') && (*x = 'A') && (*x = '0') && (*x = 'A') && (*x <= 'z') といった方法で文字なのか判断していたけど、これ、関数にすれば自作関数ってことで許されるのかな。

やってみよう(`・ω・´)

アバター
せんちゃ
記事: 50
登録日時: 14年前

Re: 関数化作業

投稿記事 by せんちゃ » 13年前

isdigitもislowerもisupperも簡単に自作できますよ。

CODE:

bool isdigit( char c )
{
	if( c >= '0' && c = 'A' && low_c = 'a' && up_c = 'a' && tolower( c ) >= 'z' ){
		return true;
	}
	return false;
}
とやればこの関数一個に文字コードを渡すだけで大小関係なく英文字を発見すれば全てtrueを返してくれます。
あとけっこうどうでもいいですが、英文字のみを対象にするなら(*x >= 'A') && (*x
#pragma warning( disable : 4996 )


// 定数はなるべく一番最初に定義
const int BUF_SIZE = 256; //バッファ領域
const int KEY_CODE = 256; //文字コード数


//文字種類
enum CharacterKind{
Letter ,
Digit ,
Other ,
};

//データ格納バッファ構造体
struct Buffer{
char buf[BUF_SIZE];
int index;

void initialize()
{
for( int i = 0 ; i buf;

if( kind[c] == targetKind ){
printf( "%c" , c );
}
}

printf( "\n" );
}


void main()
{
for( int i = 0 ; i < KEY_CODE ; i++ ){ kind = Other; }
for( int i = 'a' ; i <= 'z' ; i++ ){ kind = Letter; }
for( int i = 'A' ; i <= 'Z' ; i++ ){ kind = Letter; }
for( int i = '0' ; i <= '9' ; i++ ){ kind = Digit; }

printf( "文字を入力しましょう!! : " );
scanf( "%s" , input.buf );


printf( "英文字 : " ); outputCharList( &input , Letter );
printf( "数字 : " ); outputCharList( &input , Digit );
printf( "その他 : " ); outputCharList( &input , Other );
}
[/code]

ISLe
記事: 2650
登録日時: 14年前

Re: 関数化作業

投稿記事 by ISLe » 13年前

C/C++は規格上、'0'~'9'の文字コードの連続性は保証されてますが、'A'~'Z'や'a'~'z'の連続性は保証されていません。
文字コード体系に依存するプログラムになりますよ。

kerotan0820
記事: 91
登録日時: 14年前

Re: 関数化作業

投稿記事 by kerotan0820 » 13年前

せんちゃさま

詳しい解説ありがとうございます。
列挙型については、まだ未学習だっため、良い機会なので学んでみたいと思います。

また、確かに 'A'から'z'の間にはいくつか記号が含まれていました。
知りませんでした…。ありがとうございます。
無題.png
無題.png (52.26 KiB) 閲覧数: 96 回