Voy a perder mi trabajo Día 1 Oferta de dedo de espada 5. Reemplazar espacios

Afectada por la epidemia, solo puede ser un hogar. La atmósfera sin un laboratorio se ha convertido completamente en un pescado salado, y los pequeños papeles no han sido devueltos al maestro. Hoy, comencé a registrar el proceso de cepillar la oferta de la espada y el dedo.
Miau, esta pregunta tiene casi 2 horas de antigüedad. Era una pregunta muy simple. La cadena del botón tiene restricciones de espacio. Informará un error cuando cruce el límite. Finalmente, se resolvió con un cambio de tamaño. Primero
mire el tema:
implemente una función para reemplazar cada espacio en la cadena s con "% 20".

Ejemplo 1:
Entrada: s = "Estamos contentos".
Salida: "Somos% 20son% 20felices".

La idea utilizada en esta pregunta es reescribir la cadena de atrás hacia adelante. Aquí debemos contar primero la longitud de la cadena y el número de espacios. Se puede resolver con un bucle while. El final de la cadena es el símbolo \\ Deje de contar, también puede usar un bucle for para resolver, de todos modos, puede usar s.size () y s.length para obtener la longitud de la cadena. Después de calcular cuánto espacio se necesita después de reescribir, después de reescribir = antes de reescribir + 2 * número de espacios, esta pregunta debe entenderse.
Luego declare dos punteros, el puntero 1 apunta al último bit antes de reescribir, el puntero 2 apunta al último bit después de reescribir, en circunstancias normales, los dos punteros se desplazan a la izquierda 1 espacio cada ciclo, y el valor del puntero 1 se asigna al puntero 2. Después de que el puntero 1 apunte a un espacio, el puntero 1 se mueve hacia la izquierda con 1 clic, luego escribe '0', '2' y '%' en el puntero 2 y se mueve hacia la izquierda 3 veces, incluso cuando los dos punteros tienen el mismo índice Listo
El código es el siguiente:

class Solution {
public:
    string replaceSpace(string s) {
        
        int num_space = 0;
        int length_1 = 0;
        
        int i = 0;
        while(s[i] != '\0')
        {
            if (s[i] == ' ')
            num_space++;
            length_1++;
            i++;
        }
      
        cout<<num_space<<endl;
        cout<<length_1<<endl;
        int length_2 = length_1 + 2*num_space;
        cout<<length_2<<endl;
        s.resize(length_2);
        while(length_1>=0 &&length_2>length_1)
        {
            if (s[length_1] == ' ')
            {
                cout<<'a'<<length_2<<'\t'<<length_1<<endl;
                
                s[length_2] = '0';
                cout<<s[length_1]<<'\t'<<s[length_2]<<endl;
                length_2--;
                s[length_2] = '2';
                cout<<s[length_1]<<'\t'<<s[length_2]<<endl;
                length_2--;
                s[length_2] = '%';
                cout<<s[length_1]<<'\t'<<s[length_2]<<endl;
                length_2--;
                
                length_1--;
                
            }
            else 
            {
                cout<<'b'<<length_2<<'\t'<<length_1<<endl;
                
                s[length_2] = s[length_1];
                length_2--;
                length_1--;
                cout<<s[length_1]<<'\t'<<s[length_2]<<endl;
                
                
            }
            
        }
        return s;
    }
    
};

Cabe señalar que el
método de doble puntero es muy clásico en la hebilla, debe aprender a usarlo; la
cadena termina con '\ 0'; s.size () y s.length () pueden calcular la longitud.
Si no desea cruzar el límite, use resize La función expande el límite. Pensé en declarar otra cadena antes, ¡pero me exigió declarar el tamaño, lo cual es molesto! Perdí mucho tiempo.
Cepillar preguntas es el proceso de acumular experiencia en la resolución de problemas, ¡Olly da!
Por la noche, lucha por otro.

3 artículos originales publicados · Me gusta0 · Visitas15

Supongo que te gusta

Origin blog.csdn.net/qq_41227231/article/details/105664624
Recomendado
Clasificación