I have strings starting with 0's. need to get number of leading zeros: Something like:
func LeadZeros(num string) int{
// count the leading zeros
return leadZerosNumber
}
LeadZeros("0012") --> 2
LeadZeros("5") --> 0
LeadZeros("05") --> 1
LeadZeros("0") --> 0 (1 also good)
LeadZeros("00") --> 1 (2 also good)
Looking for something embedded in go (or very short format)
e.g for writing there is: strings.Repeat("0", 3)
func LeadZeros(num string) int {
i := 0
for ;i < len(num) && num[i] == '0'; i++ {
}
return i
}
There are a lot of ways to do this and I would suggest the easiest to understand. Here is another one-liner:
func LeadZeros(num string) int {
return len(num) - len(strings.TrimLeft(num, "0"))
}
Using regular expressions:
func LeadingZeros(str string) int {
re := regexp.MustCompile("^0.*")
match := re.FindString(str)
return len(match)
}
func LeadZeros(num string) int{
leadZerosNumber := 0
for leadZerosNumber < len(num) && num[leadZerosNumber] == '0' {
leadZerosNumber++
}
return leadZerosNumber
}
You can check all entire code on playground
To adapt code to output these cases:
LeadZeros("0") --> 0
LeadZeros("00") --> 1
Just change for condition from leadZerosNumber < len(num) && num[leadZerosNumber] == '0'
to leadZerosNumber < len(num) - 1 && num[leadZerosNumber] == '0'
package main
import (
"fmt"
)
func main() {
yourString := "0012"
fmt.Println("Number Of Initial 0 = ", leadZeros(yourString))
}
func leadZeros(num string) (leadZerosNumber int) {
for index := range num {
if string(num[index]) == "0" {
leadZerosNumber++
} else {
break
}
}
return leadZerosNumber
}
package main
import "fmt"
func main(){
fmt.Println(LeadingZeros("0010"))
}
func LeadingZeros(s string) int {
c:=0
for _,v := range s {
if v=='0'{
c++
}else{
break
}
}
return c
}