-4

我有以 0 开头的字符串。需要获得前导零的数量:类似于:

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)

寻找嵌入在 go 中的东西(或非常短的格式)

例如写作有:strings.Repeat("0", 3)

4

5 回答 5

3
func LeadZeros(num string) int {

    i := 0
    for ;i < len(num) && num[i] == '0'; i++ {
    }

    return i
}

有很多方法可以做到这一点,我建议最容易理解的方法。这是另一个单行:

func LeadZeros(num string) int {
    return len(num) - len(strings.TrimLeft(num, "0"))
}
于 2018-10-29T12:30:59.257 回答
1
func LeadZeros(num string) int{
    leadZerosNumber := 0
    for leadZerosNumber < len(num) && num[leadZerosNumber] == '0' {  
        leadZerosNumber++
    }

    return leadZerosNumber
}

您可以在操场上检查所有完整代码

要调整代码以输出这些情况:

LeadZeros("0") --> 0

LeadZeros("00") --> 1

只需将条件更改leadZerosNumber < len(num) && num[leadZerosNumber] == '0'leadZerosNumber < len(num) - 1 && num[leadZerosNumber] == '0'

于 2018-10-29T12:27:47.180 回答
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
}
于 2018-10-29T12:28:43.127 回答
0
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
}
于 2018-10-29T12:31:55.027 回答
-1

使用正则表达式:

func LeadingZeros(str string) int {
    re := regexp.MustCompile("^0.*")
    match := re.FindString(str)
    return len(match)
}
于 2018-10-29T12:27:18.120 回答