PR

【C・C++】配列とは?【文字列との関係】

アイキャッチ C++
この記事は約8分で読めます。

配列に関しての記事です。
文字列との関係性についても解説しています。

のんびり丸

WEBアプリの開発等をしています。
日々の学習の備忘録として運営していこうと思います。

のんびり丸をフォローする

配列

配列とは、複数の同じ型の変数を1つにまとめたものです。
大量のデータを扱う際に配列を用いると、効率良くコーディング出来ます。

最初に箱の個数を指定して、指定の番号の箱に値を入れていくようなイメージです。

コーディング例①

#include <stdio.h> // printf()を使用するために必要

int main()
{
	int a[5];
	a[0] = 10;
	a[1] = 20;
	a[2] = 30;
	a[3] = 40;
	a[4] = 50;
	printf("%d\n", a[1]);
	printf("%d\n", a[3]);

	return 0;
}
出力
20
40

for文と配列を組み合わせると、効率良くコードを記述することが出来ます。
また、[]に何も入力しない場合は、要素数を自動的に決定してくれます。

コーディング例②

#include <stdio.h> // printf()を使用するために必要

int main()
{
	int a[] = { 1, 2, 3, 4, 5 }, i;
	for (i = 0; i < 5; i++)
		printf("%d\n", a[i]);

	return 0;
}
出力
1
2
3
4
5

文字列

文字列は、配列の要素に一つずつ文字を入力したものです。
文字列の最後には、\0【NULL文字】を入力します。

コーディング例①

#include <stdio.h> // printf()を使用するために必要

int main()
{
	char a[7] = { 'M', 'O', 'N', 'D', 'A', 'Y', '\0' };
	printf("%s\n", a);
	a[0] = 'S';
	a[1] = 'U';
	printf("%s\n", a);

	return 0;
}
出力
MONDAY
SUNDAY

コーディング例②

文字列は配列なので、要素を入れ替えることも可能です。

#include <stdio.h> // printf()を使用するために必要

int main()
{
	char a[6] = "ABCDE";
	char b[6];
	int i = 0;
	while (a[i] != '\0')
	{
		b[i] = a[4-i];
		++i;
	}
	b[5] = '\0';
	printf("%sを逆さ読みすると、%sになる。\n", a, b);

	return 0;
}
出力
ABCDEを逆さ読みすると、EDCBAになる。

文字列関数

strlen()

文字列の長さを取得する関数です。
ストリングレンと読みます。

strlen(文字列)

コーディング例①

#include <stdio.h> // printf()を使用するために必要
#include <string.h> // 文字列関数を使用するために必要

int main()
{
	char a[] = "Nonbirimaru";
	int length;
	length = strlen(a);
	printf("%d\n", length);

	return 0;
}
出力
11

strcpy_s()

文字列をコピーする関数です。
ストリングコピーと読みます。

strcpy_s(コピー先, 文字列)

コーディング例①

#include <stdio.h> // printf()を使用するために必要
#include <string.h> // 文字列関数を使用するために必要

int main()
{
	char a[] = "Nonbirimaru";
	char b[6];
	strcpy_s(a, "Hello World");
	strcpy_s(b, "ABCDE");
	printf("%s\n", a);
	printf("%s\n", b);

	return 0;
}

C言語では、strcpy()だったのですが、strcpy_s()にしないとエラーが発生します。

出力
Hello World
ABCDE

strcat_s()

文字列を結合する関数です。
ストリングキャットと読みます。

strcat_s(A, B)

catは、concatenation【連結】の略称のようです。

コーディング例①

#include <stdio.h> // printf()を使用するために必要
#include <string.h> // 文字列関数を使用するために必要

int main()
{
	char a[15] = "This ";
	char b[] = "is a ";
	char c[] = "pen.";
	strcat_s(a, b);
	strcat_s(a, c);
	printf("%s\n", a);

	return 0;
}
出力
This is a pen.

C言語では、strcpy()だったのですが、strcpy_s()にしないとエラーが発生します。

3つ以上の文字列を結合する場合は、複数回に分けて結合する必要があります。
また、配列の大きさを超えると、エラーが発生します。

strcmp()

文字列を比較する関数です。
ストリングコンプと読みます。

strcmp(A, B)

コーディング例①

#include <stdio.h> // printf()を使用するために必要
#include <string.h> // 文字列関数を使用するために必要

int main()
{
	char a[] = "ABC";
	char b[] = "DEF";
	int c = strcmp(a, b);
	printf("%d\n", c);

	return 0;
}
出力
-1

数値の意味

変数の値意味
c = 0AとBは等しい
c = -1AはBよりも辞書で前に位置する
c = 1AはBよりも辞書で後に位置する

コーディング例②

#include <stdio.h> // printf()を使用するために必要
#include <string.h> // 文字列関数を使用するために必要

int main()
{
	char a[] = "ABC";
	char b[] = "ABC";
	char c[] = "ABCD";
	int d = strcmp(a, b);
	int e = strcmp(a, c);
	int f = strcmp(c, a);
	printf("%d\n", d);
	printf("%d\n", e);
	printf("%d\n", f);

	return 0;
}
出力
0
-1
1

sprintf_s()

文字列を生成するための関数です。
エスプリントエフと読みます。

sprintf_s(コピー先のポインタ, 第一引数のサイズ, フォーマット, 数値)

コーディング例①

#include <stdio.h> // printf()を使用するために必要

int main()
{
	char a[20];
	sprintf_s(a, sizeof(a), "%f", 123.45);
	printf("%s\n", a);

	return 0;
}
出力
123.450000

atoi

文字列を数値に変換する関数です。
エイトゥーアイと読みます。

atoi(○○)

コーディング例①

#include <stdio.h> // printf()を使用するために必要
#include <stdlib.h> // atoi()を使用するために必要

int main()
{
	char a[] = "12345";
	int b = atoi(a);
	printf("%d\n", b);

	return 0;
}
出力
12345

多次元配列

コーディング例①

#include <stdio.h> // printf()を使用するために必要

int main()
{
	int i, j;
	int a[2][3] = {
		{1, 2, 3},
		{4, 5, 6}
	};

	for(i = 0; i < 2; ++i) {
		for (j = 0; j < 3; ++j)
			printf("a[%d][%d] = %d ", i, j, a[i][j]);
		printf("\n");
	}

	return 0;
}
出力
a[0][0] = 1 a[0][1] = 2 a[0][2] = 3
a[1][0] = 4 a[1][1] = 5 a[1][2] = 6
タイトルとURLをコピーしました