<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);
}