亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

底線從打印字符串上剪下

底線從打印字符串上剪下

Go
翻過高山走不出你 2022-01-10 10:28:55
我有一個打印多行字符串的程序,它切斷了底部。輸出:[   ][██████╗  ██╗  ██╗ ██████╗  ██████╗ ][╚════██╗ ██║  ██║ ╚════██╗ ╚════██╗][ █████╔╝ ███████║  █████╔╝  █████╔╝][██╔═══╝  ╚════██║ ██╔═══╝   ╚═══██╗]用于生成它的程序:package mainimport (        "fmt"        "strconv"        "strings")const one = ` ██╗███║╚██║ ██║ ██║ ╚═╝`const two = `██████╗ ╚════██╗ █████╔╝██╔═══╝ ███████╗╚══════╝    `const three = `██████╗ ╚════██╗ █████╔╝ ╚═══██╗██████╔╝╚═════╝ `const four = `██╗  ██╗██║  ██║███████║╚════██║     ██║     ╚═╝`const five = `███████╗██╔════╝███████╗╚════██║███████║╚══════╝`const six = ` ██████╗ ██╔════╝ ███████╗ ██╔═══██╗╚██████╔╝ ╚═════╝ `const seven = `███████╗╚════██║    ██╔╝   ██╔╝    ██║     ╚═╝ `const eight = ` █████╗ ██╔══██╗╚█████╔╝██╔══██╗╚█████╔╝ ╚════╝ `const nine = ` █████╗ ██╔══██╗╚██████║ ╚═══██║ █████╔╝ ╚════╝ `const zero = ` ██████╗ ██╔═████╗██║██╔██║████╔╝██║╚██████╔╝ ╚═════╝ `var numbers = []string{zero, one, two, three, four, five, six, seven, eight, nine}func getAscii(number int) [][]string {        listOfNumbers := strings.Split(strconv.Itoa(number), "")        var ascii [][]string        for _, num := range listOfNumbers {                intnum, _ := strconv.Atoi(num)                ascii = append(ascii, strings.Split(numbers[intnum], "\n"))        }        return ascii}func LongestSlice(slices [][]string) int {        var longest int = 0        for _, slice := range slices {                if len(slice) > longest {                        longest = len(slice)                }        }        return longest}為什么是這樣?我很困惑在哪里看。我怎樣才能解決這個問題,這樣它就不會切斷底部?抱歉,我包含了整個程序,我不知道問題出在哪里。
查看完整描述

2 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

只是在循環條件下過度工程化。嘗試

for lineNumber := 0; lineNumber <= LongestSlice(stuff)-1; lineNumber++ {

在 func joinStrings 的外循環中??吹剿行?a >https://play.golang.org/p/eR4JJtY4T1


查看完整回答
反對 回復 2022-01-10
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

對于您要完成的工作,您的解決方案似乎過于復雜。一種簡單的方法是接受 evanmcdonnal 的建議并使用映射來定義整數如何轉換為相應的字符串常量,如下所示:


var integerToStr = map[int]string{

  0: zero,

  1: one,

  2: two,

  3: three,

  4: four,

  5: five,

  6: six,

  7: seven,

  8: eight,

  9: nine,

}

...在這種情況下,您可以像這樣轉換整數:


if str, present := integerToStr[i]; present {

  // do something with the string

} else {

  // default to something else?

}

如果你不喜歡包范圍內的變量,你也可以使用 switch 語句在函數內部做同樣的事情:


var glyph string

switch num {

    case "1":

        glyph = one

    case "2":

        glyph = two

    case "3":

        glyph = three

    case "4":

        glyph = four

    case "5":

        glyph = five

    case "6":

        glyph = six

    case "7":

        glyph = seven

    case "8":

        glyph = eight

    case "9":

        glyph = nine

    case "0":

        fallthrough

    default:

        glyph = zero

    }

我還建議為您的字母制定一個標準高度,并將其與字符串本身保持一致。這使您可以通過創建一個固定長度的數組,將每個字符串的相應行附加到該數組的每個成員,然后將其轉換為切片并使用“strings.Join”來完成加入最后的字符串:


var out [glyphHeight]string


for _, glyph := range glyphs {

    for i, line := range strings.Split(glyph, "\n") {

        out[i] += " " + line

    }

}


return strings.Join(out[:numGlyphLines], "\n")

我認為值得一提的另一件有點迂腐的事情是,您錯誤地將字符串稱為 ASCII。Go 實際上使用 UTF 作為其字符串。在這個例子中它并不重要,但你應該記住這一點。


查看完整回答
反對 回復 2022-01-10
  • 2 回答
  • 0 關注
  • 203 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號