文字列反転 (英単語全体が反転)

目次

 1. 思考分析

2. コードの表示と説明

1.全体の反転

2. 単一単語の反転

3. 完全なコード表示

4. まとめ


まえがき: 下の図に示すように、文字列の一般的な反転は 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 回クリックしてください。次号でお会いしましょう!

おすすめ

転載: blog.csdn.net/2303_78442132/article/details/132152553