連載
【問題10】ポインタで文字列を操作しよう:完全マスター! 組み込みC言語プログラミング(11)(2/3 ページ)
C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回も引き続き、「配列とポインタの深い関係」を探ります。
文字列とは
文字列とは単語や文章など文字が並んだものをいいます。C言語の文字列は文字の配列ですが、文字の並びの終わりにヌル文字(null character)が付加されます。
C言語で文字とは1バイトで納まるビット表現(つまり1バイトの文字コード)と定義されているので、文字列はcharの配列となるわけです。
例えば
char moji[] = "monoist";
と宣言すると、下図のように文字列"monoist"を初期値とする文字列がメモリのどこかに確保されます。ここでmoji[7]の¥0はヌル文字を表し、その値は0です。
文字列の英小文字を英大文字変換する
それでは、strupper.cについて解説しましょう。以下にstrupper.cのフローチャートを示すので参考にしてください。
strupper.cでは、添字iによりstrを先頭から順に一文字ずつ、ヌル文字に行き着くまで調べます。
10行目のfor文
for (i = 0; str[i] != '¥0'; i++) {
がそれに当たります。ヌル文字はC言語で¥0で表されます。
11行目のif文の条件式
str[i] >= 'a' && str[i] <= 'z'
では、str[i]が英小文字であることを判定しています。
1つ1つの文字には、コンピュータが扱うための固有の番号、すなわち文字コードが割り当てられています。ASCIIコードでは文字aは97、文字zは122で、英小文字(a〜z)の文字コードはその間にあるからです。
また、英小文字から英大文字に変換してるのが、12行目で
str[i] = str[i] - 'a' + 'A';
は、まずstr[i]から文字aを引くことで、str[i]が文字aから何番目の文字か求め、それに文字Aを加えて、英大文字(A〜Z)に変換しています。
Copyright © ITmedia, Inc. All Rights Reserved.