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

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

對于字符串切片的循環迭代不起作用

對于字符串切片的循環迭代不起作用

Go
繁星點點滴滴 2023-04-17 15:06:14
我寫了這段代碼,它應該將一個小寫的英語短語翻譯成 pig latin。package mainimport (    "fmt"    "strings"    "bufio"    "github.com/stretchr/stew/slice"    "regexp"    "os")func main() {    lst := []string{"sh", "gl", "ch", "ph", "tr", "br", "fr", "bl", "gr", "st", "sl", "cl", "pl", "fl", "th"}    reader := bufio.NewReader(os.Stdin)    fmt.Print("Type what you would like translated into pig-latin and press ENTER: ")    sentenceraw, _ := reader.ReadString('\n')    sentence := strings.Split(sentenceraw, " ")    isAlpha := regexp.MustCompile(`^[A-Za-z]+$`).MatchString    newsentence := make([]string, 0)    for _, i := range sentence {        if slice.Contains([]byte{'a', 'e', 'i', 'o', 'u'}, i[0]) {            newsentence = append(newsentence, strings.Join([]string{string(i), "ay"}, ""))        } else if slice.Contains(lst, string(i[0])+string(i[1])) {            newsentence = append(newsentence, strings.Join([]string{string(i[2:]), string(i[:2]), "ay"}, ""))        } else if !isAlpha(string(i)) {            newsentence = append(newsentence, strings.Join([]string{string(i)}, ""))        } else {            newsentence = append(newsentence, strings.Join([]string{string(i[1:]), string(i[0]), "ay"}, ""))        }    }    fmt.Println(strings.Join(newsentence, " "))}但是,它無法對短語中的最后一個單詞執行任何操作。如果我使用句子“the quick brown fox jumped over the lazy dog”我得到“ethay uickqay ownbray oxfay umpedjay overay ethay azylay dog”這里的一切都是對的,除了最后一句話!為什么它不起作用?如果我使用“hello world”作為我的短語,也會發生同樣的事情。
查看完整描述

1 回答

?
慕的地8271018

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

包緩沖區

func (*Reader) 讀取字符串

func?(b?*Reader)?ReadString(delim?byte)?(string,?error)

ReadString 一直讀取到輸入中第一次出現 delim,返回一個包含數據的字符串,直到并包括分隔符。如果 ReadString 在找到分隔符之前遇到錯誤,它會返回錯誤之前讀取的數據和錯誤本身(通常是 io.EOF)。當且僅當返回的數據不以 delim 結尾時,ReadString 返回 err != nil。


返回包含數據的字符串,包括分隔符。

擺脫任何尾隨換行符:"\n""\r\n"。要快速修復,請寫:

sentence?:=?strings.Split(strings.TrimSpace(sentenceraw),?"?")

例如,

package main


import (

? ? "bufio"

? ? "fmt"

? ? "os"

? ? "regexp"

? ? "strings"


? ? "github.com/stretchr/stew/slice"

)


func main() {

? ? lst := []string{"sh", "gl", "ch", "ph", "tr", "br", "fr", "bl", "gr", "st", "sl", "cl", "pl", "fl", "th"}

? ? reader := bufio.NewReader(os.Stdin)

? ? fmt.Print("Type what you would like translated into pig-latin and press ENTER: ")

? ? sentenceraw, _ := reader.ReadString('\n')

? ? sentence := strings.Split(strings.TrimSpace(sentenceraw), " ")

? ? isAlpha := regexp.MustCompile(`^[A-Za-z]+$`).MatchString

? ? newsentence := make([]string, 0)

? ? for _, i := range sentence {

? ? ? ? if slice.Contains([]byte{'a', 'e', 'i', 'o', 'u'}, i[0]) {

? ? ? ? ? ? newsentence = append(newsentence, strings.Join([]string{string(i), "ay"}, ""))

? ? ? ? } else if slice.Contains(lst, string(i[0])+string(i[1])) {

? ? ? ? ? ? newsentence = append(newsentence, strings.Join([]string{string(i[2:]), string(i[:2]), "ay"}, ""))

? ? ? ? } else if !isAlpha(string(i)) {

? ? ? ? ? ? newsentence = append(newsentence, strings.Join([]string{string(i)}, ""))

? ? ? ? } else {

? ? ? ? ? ? newsentence = append(newsentence, strings.Join([]string{string(i[1:]), string(i[0]), "ay"}, ""))

? ? ? ? }

? ? }

? ? fmt.Println(strings.Join(newsentence, " "))

}

輸出:


Type what you would like translated into pig-latin and press ENTER: hello world

ellohay orldway


查看完整回答
反對 回復 2023-04-17
  • 1 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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