5

按给定字符将字符串拆分为数组的最简单方法是什么?例如,通过空间分割来制作一个单词数组;甚至制作一个包含字符串所有字符的数组。

我能想到的唯一方法是search在循环中使用。由于所有语言都有用于此目的的功能,因此恐怕我缺少PostScript这样做的功能。

4

2 回答 2

8
%!

%(string) (delimiter)  split  [(s)(t)(r)(i)(n)(g)]
/split {              % str del
    [ 3 1 roll        % [ str del
    {                 % [ ... str del
        search {      % [ ... post match pre
            3 1 roll   % [ ... pre post match  %ie. [ ... pre str' del
        }{            % [ ... str
            exit       % [ ... str  %% break-from-loop
        }ifelse
    }loop             % [ ...
    ]                 % [ ... ]
} def

(string of words separated by spaces)( )split ==
%-> [(string) (of) (words) (separated) (by) (spaces)]

(string.of.words.separated.by.dots)(.)split ==
%-> [(string) (of) (words) (separated) (by) (dots)]
于 2012-12-23T16:22:35.053 回答
6

您与search操作员的合作是正确的。它的目的是执行文本字符串搜索和匹配。以下是PostScript 语言参考手册search中的运算符摘要:

search   string seek search post match pre true (if found)  
         string false (if not found)  

         looks for the first occurrence of the string seek within string and  
         returns results of this search on the operand stack. The topmost   
         result is a boolean that indicates if the search succeeded.  

         If search finds a subsequence of string whose elements are equal   
         to the elements of seek, it splits string into three segments:   
         pre, the portion of string preceding the match; match, the portion  
         of string that matches seek; and post, the remainder of string. It  
         then pushes the string objects post, match, and pre on the operand   
         stack, followed by the boolean true. All three of these strings are  
         substrings sharing intervals of the value of the original string.  

         If search does not find a match, it pushes the original string  
         and the boolean false.  

         Example:  

             (abbc) (ab) search ==> (bc) (ab) ( ) true  
             (abbc) (bb) search ==> (c) (bb) (a) true  
             (abbc) (bc) search ==> () (bc) (ab) true  
             (abbc) (B) search ==> (abbc) false  
于 2012-09-08T03:11:28.457 回答