我如何在不使用任何功能的情况下计算字符串的单词

时间:2018-09-13 09:28:47

标签: sap abap

您好专家

我需要一个无需使用ABAP中任何函数即可计算字符串字数的帮助。 我们只能使用do循环和if条件。

请帮助

2 个答案:

答案 0 :(得分:2)

METHODS count_words
  IMPORTING
    iv_text          TYPE string
  RETURNING
    VALUE(rv_result) TYPE i.

METHOD count_words.
  CONSTANTS lc_space TYPE string VALUE ` `.
  DATA(lv_remaining_text) = iv_text.
  DATA(lv_last_char) = ``.
  DO.
    IF lv_remaining_text IS INITIAL.
      RETURN. " or EXIT if you omit the METHOD around this
    ENDIF.
    DATA(lv_next_char) = lv_remaining_text(1).
    IF lv_next_char <> lc_space AND
       ( lv_last_char IS INITIAL OR
         lv_last_char = lc_space ).
      rv_result = rv_result + 1.
    ENDIF.
    lv_last_char = lv_next_char.
    lv_remaining_text = lv_remaining_text+1.
  ENDDO.
ENDMETHOD.

请在实践中不要这样编写代码。这种低级字符变戏法仅用于教育目的。

在现实生活中,请使用以下内容:

METHOD count_words_cleanly.
  rv_result = count( val   = iv_text
                     regex = `(\s\S|^\S)` ).
ENDMETHOD.

答案 1 :(得分:0)

您可以计算单词之间的空格数。 您至少需要STRLEN才能确定字符串长度...没有它,我认为这行不通。在某些情况下,CONDENSE可能会有用……尝试不使用CONDENSE。

DATA a TYPE string VALUE 'MY NAME IS JOHN'.
DATA c TYPE i.
DATA d TYPE c.
DATA words TYPE i value 1.
DATA e TYPE i VALUE 0.

CONDENSE a.
c = STRLEN( a ).
DO c TIMES.
  d = a+e(1).
  e = e + 1.
  IF d = ' '.
    words = words + 1.
  ENDIF.
ENDDO.
WRITE words. // just as output ... delete on demand