Given an IP address, remove leading zeros from the IP address.
Examples:
Input : 100.020.003.400
Output : 100.20.3.400
Input :001.200.001.004
Output : 1.200.1.4
The approach is to split the given string by “.” and then convert it to an integer which removes the leading zeros and then join back them to a string.To convert a string to an integer we can use int(s) and then convert it back to string by str(s) and then join them back by using join function.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
string removeZeros(string s)
{
vector<string> v;
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;
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 = "" ;
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;
ip = "100.020.003.400" ;
cout << (removeZeros(ip)) << "\n" ;
ip = "001.200.001.004" ;
cout << (removeZeros(ip)) << "\n" ;
return 0;
}
|
Python
def removeZeros(ip):
new_ip = "." .join([ str ( int (i)) for i in ip.split( "." )])
return new_ip ;
ip = "100.020.003.400"
print (removeZeros(ip))
ip = "001.200.001.004"
print (removeZeros(ip))
|
Output
100.20.3.400
1.200.1.4
Method 2 : Regex
Using a capture group, match the last digit and copy it and prevents all the digits from being replaced.
regex \d can be explained as:
- \d : Matches any decimal digit
\d Matches any decimal digit, this is equivalent
to the set class [0-9].
- \b allows you to perform a “whole words only” search using a regular expression in the form of \bword\b
regex \b can be explained as:
\b allows you to perform a "whole words only" search u
sing a regular expression in the form of \bword\b
Implementation:
Python
import re
def removeZeros(ip):
new_ip = re.sub(r '\b0+(\d)' , r '\1' , ip)
return new_ip
ip = "100.020.003.400"
print (removeZeros(ip))
ip = "001.200.001.004"
print (removeZeros(ip))
|
Output
100.20.3.400
1.200.1.4
Method 3: Storing the index of the first non zero character.
The approach is to split the string by “.” and store it in another string x.
Now get the index of the first non-zero character of that string and store
it in another variable ind. Initialise that variable to -1 which indicates that there is
no non-zero character in the string .In another variable append the substring picking
up characters from that index till the end in another string y.
Source code : c++ solution
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;
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;
f=1;
}
}
else
{
if (ind==-1)
y=y+ "." + "0" ;
else
y=y+ "." +x.substr(ind);
ind=-1;f=0;x= "" ;
}
}
return y.substr(1);
}
|
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
27 Sep, 2022
Like Article
Save Article