Dada una dirección IP, elimine los ceros iniciales de la dirección IP.
Ejemplos:
Input : 100.020.003.400 Output : 100.20.3.400 Input :001.200.001.004 Output : 1.200.1.4
El enfoque es dividir la string dada por «.» y luego convertirlo en un número entero que elimine los ceros iniciales y luego volver a unirlos en una string. devuélvalos usando la función de unión.
Implementación:
C++
// Cpp program to remove leading zeros // an IP address and print the IP #include <bits/stdc++.h> using namespace std; // function to remove leading zeros string removeZeros(string s) { vector<string> v; // splits the ip by "." for (int i = 0; i < s.length(); i++) { string ans; while (i < s.length() && s[i] != '.') { ans += s[i]; i++; } v.push_back(ans); } vector<int> num; // converts the words to integers to remove leading removeZeros for (auto str : v) { int temp = 0; for (int i = 0; i < str.length(); i++) { temp *= 10; temp += (str[i] - '0'); } num.push_back(temp); } string ans = ""; // Convert back the integer to string and join them back to a string for (auto i : num) { ans += '.'; string temp; while (i) { temp += ('0' + (i % 10)); i /= 10; } reverse(temp.begin(), temp.end()); ans += temp; } return ans.substr(1); } int main() { string ip; // example1 ip = "100.020.003.400"; cout << (removeZeros(ip)) << "\n"; // example2 ip = "001.200.001.004"; cout << (removeZeros(ip)) << "\n"; return 0; }
Python
# Python program to remove leading zeros # an IP address and print the IP # function to remove leading zeros def removeZeros(ip): # splits the ip by "." # converts the words to integers to remove leading removeZeros # convert back the integer to string and join them back to a string new_ip = ".".join([str(int(i)) for i in ip.split(".")]) return new_ip ; # driver code # example1 ip ="100.020.003.400" print(removeZeros(ip)) # example2 ip ="001.200.001.004" print(removeZeros(ip))
100.20.3.400 1.200.1.4
Método 2: expresión regular
Usando un grupo de captura, haga coincidir el último dígito y cópielo y evite que se reemplacen todos los dígitos.
regex \d se puede explicar como:
- \d : coincide con cualquier dígito decimal
\d Matches any decimal digit, this is equivalent to the set class [0-9].
- \b le permite realizar una búsqueda de «solo palabras completas» utilizando una expresión regular en forma de \bword\b
regex \b puede explicarse como:
\b allows you to perform a "whole words only" search u sing a regular expression in the form of \bword\b
Implementación:
Python
# Python program to remove leading zeros # an IP address and print the IP using regex import re # function to remove leading zeros def removeZeros(ip): new_ip = re.sub(r'\b0+(\d)', r'\1', ip) # splits the ip by "." # converts the words to integers to remove leading removeZeros # convert back the integer to string and join them back to a string return new_ip # driver code # example1 ip ="100.020.003.400" print(removeZeros(ip)) # example2 ip ="001.200.001.004" print(removeZeros(ip))
100.20.3.400 1.200.1.4
Método 3: almacenar el índice del primer carácter distinto de cero.
El enfoque es dividir la string por «.» y almacenarlo en otra string x.
Ahora obtenga el índice del primer carácter distinto de cero de esa string y almacene
en otra variable ind. Inicialice esa variable a -1, lo que indica que hay
ningún carácter distinto de cero en la string. En otra variable, agregue la substring seleccionando
subir caracteres desde ese índice hasta el final en otra string y.
Código fuente: solución c++
C++
#include<bits/stdc++.h> using namespace std; int main() { string s="152.02.0015.00"; string newIPAdd(string); cout<<newIPAdd(s); return 0; } string newIPAdd (string s) { long long int i,l,f=0,ind=-1;// initialising ind to -1 to indicate that there is no non-zero character in the string string x="",y=""; char c; s=s+"."; l=s.length(); for(i=0;i<l;i++) { c=s.at(i); if(c!='.') { x=x+c; if(c!='0' && f==0) { ind=x.length()-1;// getting the index of first non-zero character f=1;//flag=1 to prevent further change of index for another non-zero character } } else { if(ind==-1) y=y+"."+"0"; else y=y+"."+x.substr(ind);//appending it to the another string ind=-1;f=0;x=""; } } return y.substr(1); }
152.2.15.0