Inversão de string (palavras inteiras em inglês são invertidas)

Índice

 1. Análise de pensamento

2. Exibição e explicação do código

1. Inversão geral

2. Inversão de palavra única

3. Exibição completa do código

Quatro. Resumo


Prefácio: Conforme mostrado na figura abaixo, nossa inversão geral de strings é uma inversão completa como a segunda frase, mas você sabe como conseguir a inversão de toda a palavra

 1. Análise de pensamento

Vendo esse tipo de questão, a primeira coisa que pensamos é em inverter a string inteira, mas não sabemos como realizar a inversão da palavra completa, então vamos pensar de outra forma, se isso pode ser realizado em a base da inversão global E quanto à reinversão de uma única palavra ?

2. Exibição e explicação do código

1. Inversão geral

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

Primeiro realizamos a inversão de toda a string e passamos os endereços do primeiro e do último elemento da string , o que facilita a execução da operação de inversão e também é mais propício à nossa posterior inversão de uma única palavra.

2. Inversão de palavra única

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 uma nova função, e criamos um parâmetro de ponteiro para receber o endereço do primeiro elemento do array , e usamos o loop while mais externo para controlar - quando o ponteiro atinge o final da string '\0', o loop é finalizado .

Sabemos que existe um espaço entre duas palavras , que é o sinal que julgamos o final da palavra , então usamos o loop while interno para controlar. Primeiro defina o ponteiro esquerdo para receber o endereço do primeiro elemento da palavra . Quando o ponteiro não for para ' ' ou '\0' , nosso ponteiro continuará descendo e parará quando o encontrar. Neste momento, o ponteiro aponta para ' ' e o endereço do elemento direito da palavra é decrementado em 1. Defina o ponteiro certo para recebê-lo e, em seguida, aninhe a função de inversão para realizar a inversão da palavra. ao mesmo tempo, use arr++ para mover o ponteiro de apontar para ' ' Mover para a primeira letra da próxima palavra .

Uma coisa a notar aqui é que quando alcançamos o último elemento da string, o loop while integrado implementará arr++ e o ponteiro aponta para '\0' neste momento , mas depois de chamar a função de inversão, arr irá + + novamente , para que o que arr aponta para It não seja '\0' , então o loop não terminará , então precisamos usar a instrução de julgamento if para julgar , e somente quando arr aponta para '' , retrocedemos.

3. Exibição completa do 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;
}

Quatro. Resumo

Claro, esta questão definitivamente não se limita a este método. Se você tiver outros métodos mais simples e convenientes, comente e envie uma mensagem privada.

Por fim, amigos que gostam dos artigos do blogueiro, não esqueçam de clicar três vezes, nos vemos na próxima edição!

Acho que você gosta

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