Inversión de palabras (explicación detallada del lenguaje C)

Tema: Inversión de palabras

Descripción: Invierte todas las palabras de la cadena.

ilustrar:

1. Los caracteres que componen una palabra son sólo 26 letras inglesas mayúsculas o minúsculas;

2. Los caracteres que no constituyen una palabra se consideran separadores de palabras;

3. El separador de palabras después de la inversión debe estar representado por un espacio; si hay varios separadores entre palabras adyacentes en la cadena original, solo se permite un separador de espacio después de la conversión de inversión;

4. Cada palabra puede tener hasta 20 letras.

Rango de datos: la longitud de la cadena satisface 1≤n≤10000;

Introduzca la descripción:

Ingrese una línea para representar la oración utilizada para la inversión.

Descripción de salida:

Genera el resultado invertido de la oración.

Ejemplo uno:

Entrada: soy estudiante

Salida: estudiante a soy yo

Ejemplo dos:

Importar: $bo*y gi!r#l

Salida: lr gi y bo

Ideas para resolver problemas:

1. La idea general es el método de doble puntero , que define un par de punteros rápidos y lentos: rápido y lento;

2. Encuentre la cola de la letra: primero deje que fast apunte al elemento de la cola de la matriz, y luego busque la cola de la letra de atrás hacia adelante. Cuando arr[fast] no es una letra ,  fast-- hasta que apunte a la letra, y luego let slow = fast En este momento, slow apunta al final de la letra;

3. Busque el encabezado de la carta: cuando arr[fast] es una letra, use fast-- hasta que apunte a algo que no sea una letra y luego imprima el valor entre arr[fast+1] y arr[slow] , seguido de un separador;

Implementación de ideas:

Primero ingrese la cadena porque contiene espacios, por lo que scanf no es fácil de usar. Use get y use la función de cadena strlen para calcular el número real de la matriz. Luego defina los punteros dobles rápidos y lentos y asígnelos;

#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 , recorre la matriz de atrás hacia adelante e imprime;

Encuentre el final de la letra: primero deje que fast apunte al elemento final de la matriz y luego busque el final de la letra de atrás hacia adelante. Cuando arr[fast] no es una letra ,  fast-- hasta que apunte a la letra, y luego let slow = fast , en este momento slow apunta al final de la letra;

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

Busque el membrete: cuando arr[fast] es una letra, fast-- , hasta que apunte a algo que no sea letra, luego imprima el valor entre arr[fast+1] y arr[slow] , agregue un separador después. e imprimir;

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

Lo anterior es el análisis de esta pregunta, aquí está el código fuente del 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;
}

Si hay alguna deficiencia, ¡no dude en complementarla y comunicarla!

fin. . .

 

Supongo que te gusta

Origin blog.csdn.net/m0_71676870/article/details/132345531
Recomendado
Clasificación