N88-BASIC、アセンブラ、Cでポインター (4回目)

2023/1/21(土)
N88-BASIC、アセンブラ、Cでポインター (4回目)
 
C言語にポインターが存在する意味が
 
文字列中のアルファベットの小文字を
大文字に変換するプログラムを作ることで
 
何となく分かるようにするシリーズです
 
 
今回はC(言語)で
普通に作ったプログラムの紹介です
プログラムと解説はコメント(/* … */)を見て下さい
 
blg~.zip中のptr004.cです
 
#include <stdio.h>     /* printf等使用の為 */
void main(void)       /* mainから実行     */
{
  char a[256];      /* 255文字+終端'\0' */
  int  i;         /* 変数の定義       */
 
  printf("? ");
  gets_s(a, 256);     /* 文字列入力      */
  printf("%s\n", a);   /* 文字列表示       */
  for (i = 0; a[i]; i++) /* a[i]!='\0'繰返し */
  {
    if ('a' <= a[i] && a[i] <= 'z')
    {
     a[i] -= 'a' - 'A';
    }
  }
  printf("%s\n", a);   /* 文字列表示        */
  gets_s(a, 256);     /* キー入力待ち     */
}
 
gets_s(a, 256);
aに入力した文字列を最大256文字まで入れる
Cの文字列は文字の配列変数に入れます
最後は'\0'が入りますので上記256文字は
255文字までの文字列という意味です
これがエラーとなる場合は(多少動作は異なりますが)
scanf_s("%s", a, 256);
を使用して下さい
 
printf("%s\n", a);
"%s"の部分がaの文字列に置換わり
"\n"は改行の表示です
 
for (i = 0; a[i]; i++)
i = 0,1,2,…と、a[i]が'\0'つまり0になるまで
繰返します
i++はiを1増やします
 
a[i]が'a'~'z'のとき'a'-'Z'(0x20)を引き
'A'~'Z'に変換しています
Cでは0xで16進数を表します
 
 
Cでは使用する変数は型指定しておく必要があります
char:8bits整数(文字)、int:32bits整数、他に
long,long long,unsigned ~,float,doubleなど
があります
 
'a'はaのキャラクターコード(0x61)
'A'はAのキャラクターコード(0x41)
 

12abを入力したとすると
 
a[0],a[1],a[2],a[3],a[4]
'1' ,'2' ,'a' ,'b' ,'\0'
を順番に調べて
'a'~'z'ならキャラクターコードを0x20引いた
文字('A'~'Z')にする
a[i] -= 'a' - 'A';
a内の0から数えてi番目の文字から0x20('a'-'A')を引く
これを文字数回繰返す
結果は
12AB
になる
 
 
C、インラインアセンブラは、
Cコンパイラーなどを準備しておいて下さい
例、Microsoft Visual Studioなど
 
windowsのconsoleアプリは実行終了後
ウインドウが閉じてしまうので
最後にキー入力待ちを入れています
使用している入力関数は
Microsoft Visual Studio以外では
代替え関数に変更する必要があるかも
しれませんがご了承下さい
 
blg~.zip(ptr004.c)は
以下のリンクからダウンロードできます

https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい














このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)