英文:
Tour of Go Exercise #23: my word counter doesn't work
问题
我正在尝试解决go tour #23中的谜题,但我不明白为什么我的单词计数器不起作用。print
似乎打印了预期的值,但测试只看到1
,而不管计数是多少。
package main
import (
"strings"
"unicode/utf8"
"golang.org/x/tour/wc"
)
func WordCount(s string) map[string]int {
// 将字符串按空格分割成切片
ws := strings.Fields(s)
// 创建一个新的映射
c := make(map[string]int)
// 遍历每个单词
for _, v := range ws {
c[v] = utf8.RuneCountInString(v)
}
print(c["am"])
return c
}
func main() {
wc.Test(WordCount)
}
可以在这里找到playground。
英文:
I'm trying to resolve the puzzle from go tour #23 and I don't understand why my word counter doesn't work. print
seems to print the expected value but the tests sees only 1
regardless the count.
package main
import (
"strings"
"unicode/utf8"
"golang.org/x/tour/wc"
)
func WordCount(s string) map[string]int {
// explode the string into a slice without whitespaces
ws := strings.Fields(s)
//make a new map
c := make(map[string]int)
//iterate over each word
for _, v := range ws {
c[v] = utf8.RuneCountInString(v)
}
print(c["am"])
return c
}
func main() {
wc.Test(WordCount)
}
The playground is available here
答案1
得分: 2
你正在解决错误的问题。它不要求你计算每个单词的长度,而是要求计算每个单词出现的次数。将以下代码:
c[v] = utf8.RuneCountInString(v)
改为:
c[v] += 1 // 或者 c[v]++
英文:
You're solving the wrong problem. It doesn't ask you for the length of each word, but for the number of times each word occurs. Change
c[v] = utf8.RuneCountInString(v)
for
c[v] += 1 // or c[v]++
答案2
得分: 1
问题是 c[v] = utf8.RuneCountInString(v)
。它有两个问题:
-
每次重新遇到一个单词时,你都会重置计数器。你应该增加计数器,而不是重置。
-
你将单词中的符文数设置为计数器的值。谜题是“文本中一个单词出现的次数”,所以只需像
c[v] = c[v] + 1
这样做(如果条目为空,则默认为0)。
此外,我会对文本进行规范化处理-去除标点符号并将所有字母转为小写。
英文:
The problem is c[v] = utf8.RuneCountInString(v)
. It has two problems:
-
You're resetting the counter for each word every time you re-encounter it. You should increment, not set.
-
You are setting the number of runes in the word to the counter. The puzzle is "how many times a word appears in the text". so just do something like
c[v] = c[v] + 1
(if the entry is empty it will default to 0)
Also, I'd normalize the text - strip punctuation marks and lowercase everything.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论