首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于字符串切片上的循环迭代,不起作用

对于字符串切片上的循环迭代,不起作用
EN

Stack Overflow用户
提问于 2018-10-01 01:14:03
回答 1查看 75关注 0票数 1

我写了这段代码,它应该把小写的英语短语翻译成猪拉丁语。

代码语言:javascript
复制
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狗”。

这里的一切都是对的,除了最后一句话!为什么不动呢?如果我用“你好世界”作为我的短语,也会发生同样的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-01 02:01:13

包装布菲奥 (读者) ReadString 函数(b *读取器) ReadString(delim字节)(字符串,错误) ReadString在输入中读取数据,直到第一次出现delim为止,返回一个字符串,其中包含数据和分隔符。如果ReadString在找到分隔符之前遇到错误,它会返回错误之前读取的数据和错误本身(通常是io.EOF)。ReadString返回err != nil当且仅当返回的数据没有以delim结尾。

返回一个字符串,该字符串包含数据,并包含分隔符。

去掉任何后面的换行符:"\n""\r\n"。要想快速解决问题,请写:

代码语言:javascript
复制
sentence := strings.Split(strings.TrimSpace(sentenceraw), " ")

例如,

代码语言:javascript
复制
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, " "))
}

输出:

代码语言:javascript
复制
Type what you would like translated into pig-latin and press ENTER: hello world
ellohay orldway
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52583495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档