Point

point of no return

文字列の配列

■文字列宣言の方法

①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」

説明が長くなるので外部リンク

http://www.c-tipsref.com/reference/stdio/sprintf.html