1

我应该如何显示字符串(向量)中包含的单词数?两个单词之间可能有多个空格。

例如:输入:'Hello World, How are you' 应该返回 5。

为了计算向量 v 中的空格数,我写: n←+/v∊' '

但是,它不会显示字数。任何人?

4

2 回答 2

1
s←'Hello world, how are you?'
a←s∊'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+/ (a,0)∧~0,a

a是一个向量,在出现字母的位置包含 1-s,在其他位置包含 0-s。

s:   H e l l o   w o r l d ,   h o w   a r e   y o u ?
a:   1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 0 1 1 1 0

单词的每个首字母都对应一个 1,前面有一个 0(或在初始位置)。好吧,如果我们把这个序列向右移动,取反,然后“和”它的原始值a,我们可以识别单词首字母:

s:           H e l l o   w o r l d ,   h o w   a r e   y o u ?
a,0:         1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 0 1 1 1 0 0
~0,a:        1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1
(a,0)∧~0,a:  1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0

现在,计算单词就像求和一样简单:+/

您可以使用我的解释器在http://ngn.github.io/apl/web/index.html#code=s%u2190%27Hello%20world%2C%20how%20are%20you%3F%27%0Aa尝试代码%u2190s%u220A%27abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%27%0A+/%28a%2C0%29%u2227%7E0%2Cahttp://tryapl.org

于 2013-05-13T17:57:33.940 回答
0

我的解决方案是类似的,但诀窍是故意在句子前添加一个空格,并只计算字母前的空格。这样一来,空格的个数就等于单词了,在执行操作之前就不用担心修剪文本了。

如果我没有添加空格(在第二行中),我将无法知道文本是否有任何前导空格,所以我必须以某种方式检查。通过故意添加一个空格,我简化了文本,以便我知道我总是在处理至少一个前导空格。

数单词:

P←"My     cat  doesn't like    fishy  tasting     food.   "
L←' '⍷' ',P
+/L∧~1⌽L

输出:

7

去掉不必要的空格:

在一个相关的主题上, 的值L也可用于修剪文本前后的空格并删除多余的空格:

1↓(L⍲1⌽L)/' ',P

输出:

"My cat doesn't like fishy tasting food."

修剪前导和尾随空格:

如果要修剪文本的开头和结尾而不删除多余的空格:

((∧\L)⍱⌽∧\⌽L)/' ',P

但是,在最后一个中,没有必要添加前导空格。因此,如果您不需要L出于任何其他原因进行计算,可以使用以下替代方法L2

L2←" "⍷P
((∧\L2)⍱⌽∧\⌽L2)/P

输出(与开头相同,但末尾的多余空格已消失):

"My     cat  doesn't like    fishy  tasting     food."
于 2013-06-16T18:58:28.463 回答