[C言語]文字列をfor文で1文字ずつループするには?

C言語

どうも、ちょげ(@chogetarou)です。

文字列(string)をfor文でループする方法を紹介します。

スポンサーリンク

方法

文字列(string)をfor文でループする方法は、2つあります。

文字数

ひとつは、文字数を使う方法です。

まず、for文のループ変数を「0」で初期化します。

ループ条件に、「ループ変数がstrlen()未満」を指定します。

strlen()の引数に、対象の文字列を指定します。

また、ループ後の処理で、ループ変数を「+1」します。

そして、{}内にfor文のループ処理を指定します。

ループ処理では、ループ変数で文字列のインデックスを取得します。

//text=対象の文字列
for (int i = 0; i < strlen(text); ++i) {
    //ループ処理
    //ループ変数(i)で文字列のインデックスを取得
    //文字は「text[i]」で取得
}

上記のforループは、文字列を1文字ずつループします。

使用例

#include <stdio.h>
#include <string.h>

int main(void){
    char *text = "Hello,World.";
    
	for (int i = 0; i < strlen(text); ++i)
	{
		printf("%c", text[i]);
	}
    
    return 0;
}
出力:
Hello,World.

ポインタ

もうひとつは、ポインタを使う方法です。

まず、対象の文字列のアドレスで初期化したポインタを用意します。

次に、for文のループ変数を用意したポインタで初期化します。

ループ条件に、「ループ変数が「’\0’」以外」を指定します。

また、ループ後の処理で、用意したポインタを「+1」し、その結果をループ変数に代入します。

そして、{}内にfor文のループ処理を指定します。

ループ処理では、ループ変数で文字列の文字を取得できます。

//text=対象の文字列
char *p = text;
for (char c = *p; c != '\0'; c = *++p)
{
    //ループ処理
    //ループ変数(c)で文字列の文字を取得
}

上記のforループは、文字列を1文字ずつループします。

上記のforループを実行するには、対象の文字列がポインタである必要があります。

使用例

#include <stdio.h>
#include <string.h>

int main(void){
    char *text = "Hello,World.";
    
	char *p = text;
	for (char c = *p; c != '\0'; c = *++p)
	{
		printf("%c", c);
	}
    
    return 0;
}
出力:
Hello,World.

まとめ

文字列(string)をfor文でループする方法は、次の2つです。

  • 文字数を使う方法
    for (int i = 0; i < strlen(text); ++i) { /*ループ処理。ループ変数(i)でインデックスを取得*/ }
  • ポインタを使う方法
    char *p = text;
    for (char c = *p; c != '\0'; c = *++p) { /*ループ処理。ループ変数(c)で文字を取得*/ }

コメント

タイトルとURLをコピーしました