2013-05-13 74 views
1

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

例如:输入: '世界,你好你怎么样' 应该返回5.

要计算的向量v空格数,我写: ñ←+ /vε'

但是,它不会显示单词的数量。 有人吗?

回答

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 

一个单词的每个首字母都对应一个以0开头的1(或者在一个初始位置)。那么,如果我们这个序列向右移,否定它,并“和”它的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

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."