<STEP1>

文字列を扱うための関数を紹介します。

文字列は、「String型」と呼ぶことが多いと確認しましたね。

 <string.h>をインクルードして、文字列を扱うための関数を呼び出しましょう。

 

①strlen()関数 … 文字列の長さを調べる関数 Length

②strcpy()関数 … 文字列のコピーをするための関数 Copy

③strcat()関数 … 文字列を連結するための関数 Concatenate

④strcmp()関数 … 文字列の比較をするための関数 Comparison

⑤strstr()関数 … 文字列の検索を行うための関数 String

 

それでは、1つずつ使い方を確認しましょう

 

 

<STEP2>

strlen()関数の使い方は簡単です。()の中に文字列の配列名を入れてあげると、「\0」をのぞいた、正味文字数が返ってきます。

 

#include <stdio.h>

#include <string.h>

int main(){

char c[100] = "I" " have" " a" " banana.";

char* pc = "You" " have" " an" " apple.";

printf("「%s」は%d文字です。\n", c, strlen(c));

printf("「%s」は%d文字です。\n", pc, strlen(pc));

return 0;

}

 

※今まで、文字列のサイズを検索するには、sizeof演算子を使って来ました。

sizeof演算子を使うと、どうなるでしょうか…?

 

 

<STEP3>

strcpy(コピー先の配列名, コピーしたい文字列や配列名) を使って、文字列を配列にコピーします。

#include <stdio.h>

#include <string.h>

int main(){

char c1[100] = "I have a banana.";

char c2[100] = "You have an apple.";

printf("%s\n", c1);

strcpy(c1,c2);

printf("%s\n", c1);

strcpy(c1,"He has a camera.");

printf("%s\n", c1);

return 0;

}

 

アドレスも変化しないことに注意してください。

#include <stdio.h>

#include <string.h>

int main(){

char c1[100] = "I have a banana.";

char c2[100] = "You have an apple.";

printf("%s, アドレス:%p\n", c1,c1);

strcpy(c1,c2);

printf("%s, アドレス:%p\n", c1,c1);

strcpy(c1,"He has a camera.");

printf("%s, アドレス:%p\n", c1,c1);

return 0;

}

 

配列の宣言をしてしまったあとは、このようにstrcpy関数を使って、値を代入することができます。

#include <stdio.h>

#include <string.h>

int main(){

char c1[100];

strcpy(c1, "I have a banana.");

printf("%s\n", c1);

return 0;

}

 

※※配列をコピーする際は、コピー先の配列の長さがコピー後の文字数よりも小さくならない様に、注意しましょう!!

 

 

<STEP4>

配列の連結は、 strcat(連結元の配列名,連結したい配列名や文字列); と記述します。

#include <stdio.h>

#include <string.h>

int main(){

char c1[100] = "I have a banana.";

char c2[100] = "You have an apple.";

printf("%s\n", c1);

strcat(c1,c2);

printf("%s\n", c1);

strcat(c1,"He has a camera.");

printf("%s\n", c1);

return 0;

}

 

※※配列を連結する際は、連結先の配列の長さが連結後の文字数よりも小さくならない様に、注意しましょう!!

 

 

<STEP5>

文字列の比較は、「==」演算子を使って行うことができません。

strcmp(比較したい変数, 比較したい変数);

として、もし比較した結果が一致していたら、0を返す仕組みになっています。

strcmp関数は、if文の中で書く場合が多いです。

比較したい変数の配列の長さも統一しておく様にしてください。

#include <stdio.h>

#include <string.h>

int main(){

char c1[100] = "I have a pen.";

char c2[50] = "I have a pen.";

char c3[100] = "You have a pen.";

char c4[100] = "I have a pen.";

 

if(strcmp(c1, c2) == 0){

printf("2つの文字列は同じです。");

} else {

printf("2つの文字列は違います。");

}

 

if(strcmp(c1, c3) == 0){

printf("2つの文字列は同じです。");

} else {

printf("2つの文字列は違います。");

}

 

if(strcmp(c1, c4) == 0){

printf("2つの文字列は同じです。");

} else {

printf("2つの文字列は違います。");

}

}

 

 

<STEP6>

strstr(検索対象の文字列が格納されている配列のアドレス, 検索文字列);

#include <stdio.h>

#include <string.h>
int main(){
    char c[100] = "I have a pen.";
    char* pc1 = strstr(c,"have");
    char* pc2 = strstr(c,"had");
    printf("%s\n", pc1);
    printf("%s\n", pc2);
}