Inversión de cadenas (las palabras enteras en inglés se invierten)

Tabla de contenido

 1. Análisis del pensamiento

2. Visualización y explicación del código.

1. Inversión general

2. Inversión de una sola palabra

3. Visualización completa del código

Cuatro Resumen


Prefacio: Como se muestra en la figura a continuación, nuestra inversión general de cadenas es una inversión completa como la segunda oración, pero ¿sabes cómo lograr la inversión de la palabra completa

 1. Análisis del pensamiento

Al ver este tipo de preguntas, lo primero que pensamos es en invertir la cadena completa, pero no sabemos cómo realizar la inversión de la palabra completa, entonces pensemos en ello de otra manera, si se puede realizar en la base de la inversión global ¿Qué pasa con la reinversión de una sola palabra ?

2. Visualización y explicación del código.

1. Inversión general

#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;
}

Primero nos damos cuenta de la inversión de toda la cadena y pasamos las direcciones del primer y último elemento de la cadena , lo que facilita la realización de la operación de inversión y también es más propicio para nuestra posterior inversión de una sola palabra.

2. Inversión de una sola palabra

void InversionWord(char* arr)
{
	while (*arr)
	{
		char* left = arr;//定义指针来接收单词的最左边元素
		while (*arr != ' ' && *arr != '\0')
		{
			arr++;
		}
		char* right = arr - 1;//定义指针来接收单词的最右边元素
		Inversion(left, right);//将单词的左右元素地址传入实现单个单词倒置
		if (*arr == ' ')
			arr++;
	}
}

Definimos una nueva función y creamos un parámetro de puntero para recibir la dirección del primer elemento de la matriz , y usamos el bucle while más externo para controlar: cuando el puntero llega al final de la cadena '\0', el bucle finaliza .

Sabemos que hay un espacio entre dos palabras , que es el signo que juzgamos al final de la palabra , por lo que usamos el bucle while interno para controlar. Primero defina el puntero izquierdo para recibir la dirección del primer elemento de la palabra . Cuando el puntero no va a ' ' o '\0' , nuestro puntero seguirá bajando y se detendrá cuando lo encuentre. En este momento, el puntero apunta a '' y la dirección del elemento derecho de la palabra se reduce en 1. Defina el puntero derecho para recibirlo y luego anide la función de inversión para realizar la inversión de la palabra. Al mismo tiempo, use arr++ para mover el puntero de "Moverse a la primera letra de la siguiente palabra" .

Una cosa a tener en cuenta aquí es que cuando llegamos al último elemento de la cadena, el bucle while incorporado implementará arr++ , y el puntero apunta a '\0' en este momento , pero después de llamar a la función de inversión, arr + + nuevamente , para que lo que arr apunte no sea '\0' , por lo que el ciclo no terminará , por lo que necesitamos usar la declaración de juicio if para juzgar , y solo cuando arr apunte a ' ' , retrocederemos.

3. Visualización completa del código

#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;
}

Cuatro Resumen

Por supuesto, esta pregunta definitivamente no se limita a este método, si tiene otros métodos más simples y convenientes, comente y envíe un mensaje privado.

Finalmente, amigos a quienes les gustan los artículos del blogger, no olviden hacer clic tres veces, ¡nos vemos en el próximo número!

Supongo que te gusta

Origin blog.csdn.net/2303_78442132/article/details/132152553
Recomendado
Clasificación