显示空格数

时间:2013-05-13 07:07:48

标签: string

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

Ex:输入:'你好世界,你好吗'应该返回5.

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

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

2 个答案:

答案 0 :(得分: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

的口译员尝试使用该代码

答案 1 :(得分: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."