4.文字を数字へ
コマンドへのパラメータは文字列のみです。従って数値をプログラムへ渡すには、
変換する必要があります。
まずは、下記の13行を入力してコンパイルして下さい。プログラム名は仮に
para2num.cとして下さい。
#include <stdio.h>
#include <string.h>
main(int argc, char *argv[])
{
int ii, ll, x = 0;
ll = strlen(argv[1]);
for (ii = 0; ii < ll; ii ++)
{
x = x * 10;
x = x + argv[1][ii] - 48;
}
printf("パラメータは[%s]です。数値では[%d]です。\n", argv[1], x);
}
コンパイルは通りましたか?ちょっと長くなったのでエラーが出た時に迷うでしょう。
それでは、実行してみましょう。実行する際はパラメータを指定します。
para2num 123
いかがですか?
画面には「パラメータは[123]です。数値では[123]です。」と表示されましたか?
表示では同じ[123]ですが、実は全然違う物です。
文字では計算出来ませんが、数値になると計算出来る様になります。
今回の学習項目
1)string.h
文字列を編集する関数が定義されているヘッダーファイルstring.h
をインクルードします。
これは、strlenを使用する為です。
2)strlen
文字列(string)の長さ(length)を求める関数です。
従って、argv[1]と言うパラメータで渡された文字列の長さをllと言うint型
の変数に返します。
今回は「123」なので「3」文字がセットされます。
3)for (ii = 0; ii < ll; ii ++) {...}
繰り返しを表わすループ文の一つで()内の条件でループします。
左項の「ii = 0;」は初期値を定義します。iiに0をセットします。
中項の「ii < ll;」は条件式です。iiがllより小さい間と言う意味です。
この条件が成立する間{}内の処理を実行します。
右項の「ii ++」はiiをインクリメント(加算)します。
内容はii = ii + 1と同じで、iiを1だけカウントアップします。
以上をまとめると、iiと言う変数を使用して初めiiに0をセットします。
それからiiがllより小さい間ずっと{}内を実行しながら実行する毎に
iiを1づつカウントアップして条件を比較していく事になります。
4)x = x * 10;
xに10をかけます。
計算式中の*は掛け算を表わします。
5)x = x + argv[1][ii] - 48;
argv[1][ii]は1つ目のパラメータの文字列でiiを足した位置の文字です。
123と言うパラメータを指定した時に、iiが0なら1、iiが1なら2と
言う意味です。
- 48は、数字の文字コード(アスキーコードと呼ばれています)の0が48から
始まり以降123456789と続いている為に48をひく事により数値化が
出来るのです。
従って、1はコードで49なので48を引いて1になります。