文字列の配列
■文字列宣言の方法
①char str = "abcd";
②char str[5] = { 'a', 'b', 'c', 'd', '\0' };
③char str[5] = "abcd";
str の中身は全部abcd\0
■表示などの際の書式指定の方法
printf( "%s" ,str );
%sー文字列
表示されるのはabcd
printf( "%c" ,str[3] );
%cー文字
表示されるのはd
■一文字一文字にアクセスさせる方法
int i = 5;
while( str[i] = '\0' ){
//str[i]に対する処理
i++;
}
ヌル文字まで
■宣言方法のNG
int i = 5;
char str[ i ] = "aaaa";
宣言に変数を使うことは出来ず下記の様なエラーが出る
可変長オブジェクトは初期化されないでしょう
■文字列操作の関数を呼び出す方法
#include<string.h>
下の関数を使うにはstring.hをincludeする
・文字列の長さを得るstrlen
char str = "abcd";
int i = strlen( str );
iにはstrの長さが入る。
\0は含まない(strがabcd\0の場合、iは4)
・文字列をコピーするstrcpy
char str = "abcd";
char str2[5];
strcpy( str2, str );
strの中身がstr2にコピーされる(srr2の中身はabcd\0)
・文字列の連結をするstrcat
char str = "abcd";
char str2 ="efgh";
strcat( str, str2 );
strとstr2が連結される
strの\0は取り除かれる( abcd\0 + efgh\0 = abcdefgh\0 )
・文字列の比較をするstrcmp
char str = "abcd";
char str2 ="efgh";
int i = strcmp( str ,str2 );
strとstr2が同じなら0が返る
上の例だとstrのが辞書的に前だから-1
逆にstr2のが辞書的に前の場合は1
if( 0 == strcmp( str, str2 ) ){
}
文字列の中身が一緒だったらという制御文
int length;
int j = strcmpn( str, str2, length );
lengthの長さまででstrcmpと同じ挙動
・文字列への変換を一挙に行うsprintf
int i =5;
char str = "abcd"
sprintf(s, "%d と %s", i, str);
printf("%s\n", s);
表示内容→「5 と abcs」
説明が長くなるので外部リンク