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

C言語

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

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

スポンサーリンク

方法

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

文字数

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

まず、初期値「0」の変数を用意します。

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

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

{}内にwhile文のループ処理を指定します。

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

そして、whileループの最後に、変数を「+1」します。

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

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

使用例

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

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

ポインタ

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

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

次に、whileのループ条件に、「用意したポインタが「’\0’」以外」を指定します。

{}内にwhileのループ処理を指定します。

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

そして、ループ処理の最後で、用意したポインタを「+1」します。

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

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

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

whileの条件式に、ポインタをそのまま指定しても「*p != ‘\0’」と同じ結果が得られます。

//ポインタを条件式を直接指定
//「*p != '\0'」と同じ結果
while (*p) {
    //ループ処理
    p++;
}

使用例

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

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

まとめ

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

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

コメント

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