我写了这段代码,它应该把小写的英语短语翻译成猪拉丁语。
package main
import (
"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, " "))
}然而,它没有对短语中的最后一个字做任何事情。
如果我用“快棕狐狸跳过懒狗”这句话,我就会得到“ownbray oxfay umpedjay overay ethay azylay狗”。
这里的一切都是对的,除了最后一句话!为什么不动呢?如果我用“你好世界”作为我的短语,也会发生同样的事情。
发布于 2018-10-01 02:01:13
包装布菲奥 (读者) ReadString 函数(b *读取器) ReadString(delim字节)(字符串,错误) ReadString在输入中读取数据,直到第一次出现delim为止,返回一个字符串,其中包含数据和分隔符。如果ReadString在找到分隔符之前遇到错误,它会返回错误之前读取的数据和错误本身(通常是io.EOF)。ReadString返回err != nil当且仅当返回的数据没有以delim结尾。
返回一个字符串,该字符串包含数据,并包含分隔符。
去掉任何后面的换行符:"\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 orldwayhttps://stackoverflow.com/questions/52583495
复制相似问题