Reemplazar espacios con %20

Reemplazar espacios (haga clic en el enlace para ingresar el título)

Descripción
  Implemente una función que reemplace cada espacio en una cadena con "%20". Por ejemplo, cuando la cadena es We Are Happy., la cadena reemplazada es We%20Are%20Happy.

Análisis del problema: la cadena original contiene espacios, la longitud de la cadena cambiada aumenta y los espacios se reemplazan con %20.

Método 1: usamos directamente la cadena C++ para crear un objeto de clase de cadena y luego recorremos la cadena original. Cuando se encuentra un espacio que no es, es decir, inserta un carácter al final del objeto de clase de cadena. Si hay un espacio encontrado, se insertará el objeto de clase de cadena.Inserte la cadena "%20" al final del .

class Solution {
    
    
public:
	void replaceSpace(char *str,int length) {
    
    
		//创建一个string类的val对象
        string val;
        //遍历原字符串
        for(size_t i = 0; i < length; i++)
        {
    
    
        	//当遇到非空格时,将原字符串对应位置的字符尾插到val对象上
            if(str[i] != ' ')
                val.push_back(str[i]);
            //当遇到空格时,将“%20”字符串尾插到val对象上
            else
                val.append("%20");
        }
        //最后检验的时str,所以我们将val进行拷贝,拷贝给str。
        strcpy(str, val.c_str());
	}
};

Método 2: al mover la cadena, podemos calcular el tamaño de la cadena reemplazada contando el número de espacios y luego mover los datos de la cadena original hacia atrás. Cuando encuentre espacios, insértelos a su vez. '0' , '2', '%' se pueden utilizar.

class Solution {
    
    
public:
	//此函数用于获取字符串中空格的个数
    int spaceNum(char* arr,int sz)
    {
    
    
        int count = 0;
        for(size_t i = 0; i < sz; i++)
        {
    
    
            if(arr[i] == ' ')
                count++;
        }
        return count;
    }
	void replaceSpace(char *str,int length) {
    
    
        //获取空格的个数
        int space_count = spaceNum(str,length);
        
        //新字符串的长度
        //原始字符串长度 + 空格个数 * 2 = 替换后的字符串长度
        int new_size = length + (space_count * 2);
        
        //定义两个char类型的指针,old_ptr指针指向原字符串长度的末尾
        //new_ptr指针指向替换字符串后新长度的末尾
        char* old_ptr = str + length;
        char* new_ptr = str + new_size;
        
        //进入循环,依次往后挪动数据
        while(old_ptr >= str && new_ptr >= str)
        {
    
    
            if(*old_ptr == ' ')
            {
    
    
                *new_ptr-- = '0';
                *new_ptr-- = '2';
                *new_ptr-- = '%';
                old_ptr--;
            }
            else
                *new_ptr-- = *old_ptr--;
        }
    }
};

De hecho, existen otros métodos para esta pregunta, que no se recomiendan aquí porque son más engorrosos, como: usar algunas funciones integradas de c y luego dividir y empalmar las cadenas.

Supongo que te gusta

Origin blog.csdn.net/weixin_43202123/article/details/120183876
Recomendado
Clasificación