「C言語練習」 1-10.c   ・前へ   ・次へ
/* 文字列操作   1-10.c */
#include <stdio.h>
#include <string.h>	// このinclude文を書いておく

/* string(列、連)は、文字列=文字の連なりの意。文字列操作に関する様々な命令や関数が
string.h という header fileに定義してある。文字列の長さを知ったり、変数に代入したり、
比較したりするのに必要。
 */
main()
{
	int i,l;
	char c[27];	// alphabetを納めるのに使用
	char str[100];

		printf("* 文字列の操作 *\n\n");

/* 文字は数値として memoryに納まっている。前に確認した様に、'A','B','C',,,'Z'は、65,66,
67,,,90という数と等価である。従って、次の様にすれば文字変数c[i]に alphabet 26文字を納め
られる。最後に終端記号'\0'、即ち 0を入れておく。文字列には必ず終端記号'\0'が要るので、
配列の要素数として(文字数+1)以上を確保して置かないといけない。
*/
	for (i=0;i<26;i++) c[i]=65+i; c[26]=0;
		printf("数値で納めたalphabet文字を表示\n%s\n\n",c);

/* 大文字の数値と小文字の数値は、26文字+記号6個分だけずれているので、次の操作で大文字
を小文字に変換出来る(ASCIIコード表参照)。*/

		printf("それを小文字に変換\n");
	for (i=0;i<26;i++) c[i]+=32;
		printf("%s\n\n",c);

/* この関係を使えば、入力された大文字を小文字に、逆に小文字を大文字に変換して出力する事
が出来る。
 */
		printf("文字変換\n文字列を入力=");
			scanf("%s",str); l=strlen(str);

/* strlen は、string length(文字列の長さ)の意で、文字列の長さを知る関数。
strlen();を使わなくても文字列長は求められるが(先頭から'\0'のある所まで探ればいい)、
簡便だから使う事にする。
*/
	for (i=0;i<l;i++) {
		if (65<=str[i] && str[i]<=90) str[i]+=32; else 
		if (97<=str[i] && str[i]<=122) str[i]-=32;
	}

/* 上の行で大文字を小文字に、下の行でその逆をしている。
上行端のelseは「その他に」の意で、if条件が成立しなかった時に更にどうするかを指定する。
elseは if (条件a) {Aをする}; else {Bをする}; の形で用いる。{Bをする}; の中にif文を書い
ても構わない(入籠に出来る)。上のelseの中でif文を使ったのは、alphabet以外の記号はその
まま表示するため。
 二つのif文を単に並列して書くだけではいけない。仮に初めのif文が実行されると、必ず次の
if文の条件に当てはまるので、元に戻ってしまう(つまり全部大文字になる)からである。else
を使えば、一つの条件で {Aをする} か {Bをする} かを判定するので、そういう事は起こらない。
 勿論、(条件a) で{Aをする} だけであれば、elseは無くてもよい。
上の例では、初めのif文一つにすれば大文字だけを小文字に変換できる。
*/
	printf("%s\n\n",str);

	printf("今入力した文字列の長さ:%d\n\n",strlen(str));

		strcpy(str,c);

/* これが文字列を代入する書き方。strcpy は、string copy(文字列の複写)の意。
 strcpy(a,b); と書けば、文字列 b が文字列 a に代入される。文字列は多くの要素(変数)を
使っており、文字列(A)と文字列(B)の長さも同じとは限らない。従って、数値を変数に代入する
様には書けない(勿論、C言語だからである。Basicなどでは数値代入と同様の書き方が可能)。
 */
	printf("入力文字列を[%s]に置換。\n初めの[%s]と同じ。\n\n",str,c);

	printf("今度は空白を含んだ文字列を入力:");
		gets(str);

/* この gets(); を使うと空白を含む文字列を取り込める。gets は、get string(文字列を得
る)の意。数字だろうが空白だろうが、何でも文字として取り込むので書式は無い。( )内には
文字列を納める変数名を書く。 */

	printf("\nこの通り、空白も納まっている:長さ=%d\n%s\n",strlen(str),str);

/* これで、整数、実数、文字、文字列の全てを扱える様になった。繰り返し処理も出来るし、
条件分岐も出来るので、ある程度の事はこなせる。入力dataの簡単な統計処理(平均や偏差、
その他を求める事)が出来るし、並べ替えも出来る。結果をどう表示すれば良いかも分かって
いる。だが、その結果が残らない。fileとして保存してあるdataを処理したい時にも困る。
そこで、次はfileを扱う練習。 */

printf("\nEnd\n");
return 0;
}


(前に戻る)   ・次へ