応用Cプログラミング演習 ( 第 7
回 )
西
ポインターと配列~どちらも文字列を
格納できる点で同じ
char str1[ ]=“SOJO";
char *str2 = "SOJO";
しかし,アクセス方法が違う
アクセス 内容
str1[0] S str1[1] O str1[2] J str1[3] O str1[4] \0
アクセス 内容
アドレス A S
アドレス A+1
O
アドレス A+2
J
アドレス A+3
O
アドレス A+4
\0
str2 アドレス A
最後の「 \0 」は?
「 \0 」はヌル文字 (NULL Character) とい
う.
「 \0 」は文字列の最後を表わす終了コード
文字列の最後は必ず「 \0 」となっている
(注意 )文字列の最後は \0 でなくてはならな
いので,配列の場合,文字数より一つ多い領
域を確保しなければならない.
例えば, str[10] とすると,文字としては 9
文字までしか入れられない.
文字列操作ライブラリー関数を使
おう
strlen(): 文字列の長さを返す
strcpy(): 文字列をコピーする
strcmp(): 文字列を比較する
必ずヘッダファイル <string.h> をインクルードす
ること
strlen(): 文字列の長さを返す関数
int strlen( 文字列 )
戻り値が「文字列」の文字数である.つまり
,
int len;
len=strlen("Fight");
とすると, len には「 5 」が入る.
練習問題~やってみよう
キーボードから任意の単語を入力すると,
その単語の文字数を表示するプログラムを
作れ.
始めに,「単語を入力してください.」と表
示し,キーボードから単語を入れて
「 Enter 」を押すと,
「その単語は○文字あります.」
と表示すること
回答例
#include <stdio.h>
#include <string.h>
void main()
{
char str[10];
int lenofstr;
printf(" 単語を入力してください. \n");
scanf("%s“,str);
lenofstr = strlen(str);
printf(" その単語は %d 文字ありま
す. \n",lenofstr);
}
完成したらいろいろな長さの文字列を
入れて試してみよう
入れた文字の長さがある長さ以上になる
とエラーが出るようになる.
何文字以上で,エラーとなるか?
strcpy(): 文字列をコピーする関
数
char *strcpy( コピー先の文字列 , コピー元の文字
列 );
戻り値はコピー先の文字列へのポインター
使用例
#include <stdio.h>
#include <string.h>
void main()
{
char str[100];
strcpy(str,"What a wonderful
city!");
printf("%s\n",str);
}
strcmp(): 文字列を比較する関
数
int strcmp( 文字列1,文字列2 );
戻り値= 0 ならば2つの文字列が一
致
戻り値>0 ならば文字列1>文字列
2
戻り値<0 ならば文字列1<文字列
2
練習問題~やってみよう
英文タイプ入力練習プログラム
ディスプレーに,
キーボードから「ワンダフル」の英語を入力して
下さい.
と表示し, wonderful と,正しく入力されたら
「正解 !! 」と表示する.
つづりが正しくなければ,
「間違っています!」と表示する.
解答例
#include <stdio.h>
#include <string.h> void main()
{ char str[100]; int result;
printf(“0533099 西宏之 \n”); // レポートでは必要 printf(“ 「ワンダフル」の英語を入力してください \n"); scanf("%s",str);
result = strcmp(str, "wonderful"); if(result==0){
printf(" 正解 !!\n"); }else{
printf(" 間違っています !!\n"); } }