ポインタを使って文字列を逆順にする

CCBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

ポインタはメモリへの直接アクセスを提供し、ポインタを使用することで、メモリ内の変数や配列の値とアドレスにアクセスして操作することができます。この実験で作成するプログラムは、ポインタ変数を使用して与えられた文字列を逆順にするものです。

注: コーディングを練習し、gccを使ってコンパイルして実行する方法を学ぶために、自分で ~/project/main.c ファイルを作成する必要があります。

cd ~/project
## main.cを作成する
touch main.c
## main.cをコンパイルする
gcc main.c -o main
## mainを実行する
./main

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/PointersandMemoryGroup(["Pointers and Memory"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/variables("Variables") c/ControlFlowGroup -.-> c/while_loop("While Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/CompoundTypesGroup -.-> c/strings("Strings") c/PointersandMemoryGroup -.-> c/pointers("Pointers") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-123325{{"ポインタを使って文字列を逆順にする"}} c/while_loop -.-> lab-123325{{"ポインタを使って文字列を逆順にする"}} c/arrays -.-> lab-123325{{"ポインタを使って文字列を逆順にする"}} c/strings -.-> lab-123325{{"ポインタを使って文字列を逆順にする"}} c/pointers -.-> lab-123325{{"ポインタを使って文字列を逆順にする"}} c/user_input -.-> lab-123325{{"ポインタを使って文字列を逆順にする"}} c/output -.-> lab-123325{{"ポインタを使って文字列を逆順にする"}} end

文字列変数を宣言する

まず、2つのchar配列を宣言します。1つは元の文字列を格納するためのもので、もう1つは逆順にした文字列を格納するためのものです。

char str[100];
char rev[100];

ポインタ変数を宣言する

次に、2つのポインタ変数を宣言します。1つは文字列 str の最初の要素を指すためのもので、もう1つは逆順にした文字列 rev の最初の要素を指すためのものです。

char *sptr = str;
char *rptr = rev;

ユーザーから入力を取得する

scanf 関数を使って、ユーザーに逆順にしたい文字列を入力してもらいます。

printf("Enter a string: ");
scanf("%s", str);

文字列の終端を見つける

文字列を逆順に走査できるように、文字列の終端を見つける必要があります。sptr が文字列の末尾のnull文字を指すまでインクリメントするために、whileループを使用します。

while(*sptr)
{
   sptr++;
}

文字列を逆順にする

次に、whileループを使って文字列 str を逆順に走査します。null文字から文字列の最後の文字に向かって sptr をデクリメントし、文字列の各要素に対して、* 演算子を使って逆順の文字列 rev に値を格納します。

while(sptr >= str)
{
   *rptr = *sptr;
   rptr++;
   sptr--;
}

逆順にした文字列の末尾にnull文字を追加する

逆順にした文字列の末尾に到達しました。逆順にした文字列の末尾にnull文字を追加する必要があります。

*rptr = '\0';

逆順にした文字列を元の文字列にコピーする

次に、逆順にした文字列を元の文字列にコピーします。

strcpy(str, rev);

逆順にした文字列を表示する

最後に、逆順にした文字列を表示します。

printf("Reversed string: %s\n", str);

まとめ

この実験では、ポインタ変数を使って与えられた文字列を逆順にする方法を学びました。ポインタはメモリへの直接アクセスを提供し、それを使うことで、メモリ内の変数や配列の値とアドレスにアクセスして操作することができます。whileループを使って文字列を逆順に走査し、逆順にした文字列を新しい文字配列に格納し、逆順にした文字列の末尾にnull文字を追加しました。最後に、逆順にした文字列を元の文字列にコピーして表示しました。