Inversão de palavras (explicação detalhada da linguagem C)

Tópico: Inversão de palavras

Descrição: Inverte todas as palavras da string.

ilustrar:

1. Os caracteres que compõem uma palavra são apenas 26 letras maiúsculas ou minúsculas do inglês;

2. Os caracteres que não constituem palavra são considerados separadores de palavras;

3. O separador de palavras após a inversão deve ser representado por um espaço, se houver vários separadores entre palavras adjacentes na string original, apenas um separador de espaço será permitido após a conversão da inversão;

4. Cada palavra pode ter até 20 letras.

Intervalo de dados: o comprimento da string satisfaz 1≤n≤10000;

Insira a descrição:

Insira uma linha para representar a frase usada para inversão

Descrição da saída:

Produza o resultado invertido da frase

Exemplo um:

Entrada: Eu sou um estudante

Resultado: aluno a sou eu

Exemplo dois:

Importar: $bo*y gi!r#l

Saída: lr gi y bo

Ideias para resolução de problemas:

1. A ideia geral é o método de ponteiro duplo , que define um par de ponteiros rápidos e lentos; rápido e lento;

2. Encontre o final da letra: primeiro deixe fast apontar para o elemento final da matriz e, em seguida, encontre o final da letra de trás para frente. Quando arr[fast] não é uma letra ,  rápido - até apontar para a letra, e então deixe lento = rápido . Neste momento, lento aponta para o final da carta;

3. Encontre o cabeçalho da carta: quando arr[fast] for uma carta, use fast-- até apontar para uma não-letra e, em seguida, imprima o valor entre arr[fast+1] até arr[slow] , seguido por um separador;

Implementação da ideia:

Primeiro insira a string porque ela contém espaços, então scanf não é fácil de usar. Use get , use a função de string strlen para calcular o número real da matriz e, em seguida, defina os ponteiros duplos rápido e lento e atribua-os;

#include<string.h>
int main() {
    char arr[10001]={0};
    gets(arr);
    int len=strlen(arr);
    int fast=len-1;
    int slow=0;

fast=len-1 , percorra o array de trás para frente e imprima;

Encontre o final da letra: primeiro deixe fast apontar para o elemento final da matriz e, em seguida, encontre o final da letra de trás para frente. Quando arr[fast] não é uma letra ,  fast-- até apontar para o carta, e então deixe slow = fast , neste momento slow aponta para o final da carta;

 while(fast>=0 && !isalpha(arr[fast]))
        {
            fast--;
        }
        slow=fast;

Encontre o cabeçalho da carta: quando arr[fast] é uma letra, fast-- , até apontar para uma não letra, então imprima o valor entre arr[fast+1] até arr[slow] , adicione um separador depois dele, e imprimir;

   while(fast>=0 && isalpha(arr[fast]))
        {
            fast--;
        }
        int i=0;
        for(i=fast+1;i<=slow;i++)
        {
            printf("%c",arr[i]);
        }
        printf(" ");

O texto acima é a análise desta questão. Aqui está o código-fonte do programa:

#include <stdio.h>
#include<string.h>
int main() {
    char arr[10001]={0};
    gets(arr);
    int len=strlen(arr);
    int fast=len-1;
    int slow=0;
    while(fast>=0)
    {
        while(fast>=0 && !isalpha(arr[fast]))
        {
            fast--;
        }
        slow=fast;
        while(fast>=0 && isalpha(arr[fast]))
        {
            fast--;
        }
        int i=0;
        for(i=fast+1;i<=slow;i++)
        {
            printf("%c",arr[i]);
        }
        printf(" ");
    }
    return 0;
}

Se houver alguma deficiência, fique à vontade para complementar e comunicar!

fim. . .

 

おすすめ

転載: blog.csdn.net/m0_71676870/article/details/132345531