「別々の文字列を連結させたい」
「strcatなどの関数を使わずに実現したい」
そんな疑問を持つ方に向けて、
プログラムの例を出しながら、わかりやすく解説していきます。
文字列の連結(結合)方法
文字列の連結方法は主に2種類あります。
1つ目: 自力でくっつける。
2つ目: 「sprintf」や「strcat」などの関数を使用する。
1つ目から順に説明していきます。
自力でくっつける。
こちらは言葉の通り、ただ単純にくっつけていきます。
下のプログラムを参考にしながら解説していきます。
#include <stdio.h>
int k(const char t[])
{
int len=0;
while(t[len]!='\0')
len++;
return len;
}
int main(void){
char str[3][256]={"Hello","World"};
int a,b,c;
printf("1つめの文字列は\"%s\"です\n",str[0]);
printf("2つめの文字列は\"%s\"です\n",str[1]);
b=k(str[0]);
c=k(str[1]);
for(a=0;a<b;a++){
str[2][a]=str[0][a];
}
for(a=0;a<c;a++){
str[2][b+a]=str[1][a];
}
printf("連結された文字列は %s です。\n",str[2]);
return 0;
}
最初に、文字列の二次元配列「str」を用意します。
「str[0]」と「str[1]」にそれぞれ連結させたい文字を入れています。
次に、「str[0]」と「str[1]」の長さを自作の関数「k」にて
変数「b」と「c」にそれぞれの長さを入れます。
長さがわかったら「str[2]」に「str[0]」の文字を
繰り返し処理「for」文を使って入れていきます。
続いて「str[0]」の文字を入れ終わった「str[2]」に同様にして
「str[1]」の文字も入れていきます。
「sprintf」関数
以下のプログラムで説明していきます。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char str[32];
int data1 = 2021;
char data2 = 'C';
char data3[] ="学習します";
// str配列に文字列を生成
sprintf(str, "%d年に%cを%s", data1, data2, data3);
printf("%s", str);
return 0;
}
配列strに文字列を連結させたいとします。
「sprintf」関数は、
で書きます。
プログラム内では応用として、
3つの文字列と数列とそのまま文字を付け足して連結させています。
「strcat」関数
以下のプログラムを使用して解説します。
#include <stdio.h>
#include <string.h>
int main(void){
char s1[]=“Hello”;
char s2[]=“World”;
strcat(s1,s2);
printf(“%sと表示させます¥n”,s1);
return 0;
}
「strcat」関数は初めに<string.h>を読み込む必要があります。
そして使うときには、
と書きます。
文字列Aの後ろに文字列Bが連結する関数になります。
そのため、文字列Aを連結後に使うときには
文字列Bがくっついていることに注意しましょう。
まとめ
今回は配列の連結(結合)方法について解説しました。
strcat関数を使えば簡単に連結させることができます。
次回は、ポインタについて解説します。