目次
まえがき: 下の図に示すように、文字列の一般的な反転は 2 番目の文のような完全な反転ですが、3 番目の文のように単語全体を反転する方法を知っていますか?以下を見てみましょう その方法を説明しましょう。
1. 思考分析
この種の質問を見て、最初に文字列全体を反転させることを考えますが、単語全体の反転を実現する方法がわかりません。次に、それが実現できるかどうか、別の方法で考えてみましょう。全体の反転の基礎 単一の単語の再反転についてはどうですか?
2. コードの表示と説明
1.全体の反転
#include<stdio.h>
#include<string.h>
void Inversion(char* start,char* end)//实现整体倒置
{
while (start < end)
{
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main()
{
char arr[100] = { 0 };
gets(arr);//用grts()函数接收字符串更方便
int len = strlen(arr);
Inversion(arr, arr + len - 1);
printf("%s\n", arr);
return 0;
}
最初に string 全体の反転を認識し、stringの最初と最後の要素のアドレスを渡します。これにより、反転操作の実行が容易になり、その後の 1 つの単語の反転も容易になります。
2. 単一単語の反転
void InversionWord(char* arr)
{
while (*arr)
{
char* left = arr;//定义指针来接收单词的最左边元素
while (*arr != ' ' && *arr != '\0')
{
arr++;
}
char* right = arr - 1;//定义指针来接收单词的最右边元素
Inversion(left, right);//将单词的左右元素地址传入实现单个单词倒置
if (*arr == ' ')
arr++;
}
}
新しい関数を定義し、配列の最初の要素のアドレスを受け取るポインター パラメーターを作成し、最も外側の while ループを使用して制御します。ポインターが文字列 '\0' の終わりに達すると、ループは終了します。。
2 つの単語の間にスペースがあることはわかっており、これは単語の終わりを判断するサインであるため、内部の while ループを使用して制御します。まず、word の最初の要素のアドレスを受け取る左ポインタを定義します。ポインタが' ' または '\0' に到達しない場合、ポインタは下に進み続け、それに達すると停止します。このときポインタは ' ' を指しており、単語の右要素のアドレスが1 減算されます。それを受け取る右ポインタを定義し、反転関数をネストして単語の反転を実現します。同時に、arr++を使用してポインタを' ' を指す位置から次の単語の最初の文字に移動します。
ここで注意すべき点の 1 つは、文字列の最後の要素に到達すると、組み込みの while ループが arr++ を実装し、この時点でポインターは '\0' を指しますが、反転関数を呼び出した後、arr は + + をもう一度行うと、arr が指すものが '\0' ではないため、ループは終了しません。そのため、 if 判定ステートメントを使用して判断する必要があり、arr が ' ' を指している場合にのみ、後方に進みます。
3. 完全なコード表示
#include<stdio.h>
#include<string.h>
void Inversion(char* start,char* end)
{
while (start < end)
{
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
void InversionWord(char* arr)
{
while (*arr)
{
char* left = arr;
while (*arr != ' ' && *arr != '\0')
{
arr++;
}
char* right = arr - 1;
Inversion(left, right);//实现单词倒置
if (*arr == ' ')
arr++;
}
}
int main()
{
char arr[100] = { 0 };
gets(arr);
int len = strlen(arr);
Inversion(arr, arr + len - 1);
InversionWord(arr);
printf("%s\n", arr);
return 0;
}
4. まとめ
もちろん、この質問はこの方法に限定されるものではありませんので、もっと簡単で便利な方法があれば、コメントやプライベートメッセージでお知らせください。
最後に、ブロガーの記事が気に入った友人の皆さん、忘れずに 3 回クリックしてください。次号でお会いしましょう!