bambooflow Note

サンプル2

最終更新:

Bot(ページ名リンク)

- view
メンバー限定 登録/ログイン

re2cで改行のカウント


文字列に含まれる改行をカウントするプログラム。

文字列の最後は'\0'であること。
改行は、"\r", "\n", "\r\n"のいずれかを1とカウントする。

ソースコード


  • lineCntr.re
#include <stdio.h>
#include <string>
 
int lineCntr(std::string buf) {
 
    int cnt = 0;
    char* p = const_cast<char*>(buf.c_str());
 
    for (;;)
/*!re2c
    re2c:define:YYCTYPE = "char";
    re2c:define:YYCURSOR = p;
    re2c:yyfill:enable = 0;
    re2c:indent:top = 1;
    re2c:indent:string = "    ";
    re2c:labelprefix = l_linecnt_;
 
    ret = '\r' | '\r'? '\n' ;
    any = . ; 
 
    [\000]  { break; }
    ret     { ++cnt; continue; }
    any     { continue; }
 */
    return cnt;
}
 
 
int main(int argc, char** argv)
{
    std::string str = "abcd\r\nefgc\n\n\n\raaa\n \r\n  \n";
 
    int x =  lineCntr(str) ;
    printf( "cnt = %d, size=%d\n", x, str.length() );
 
    return 0;
}
 

コンパイル

% [[re2c]] -i -o lineCntr.cpp lineCntr.re
% g++ -o run.x lineCntr.cpp

結果


% ./run.x
cnt = 8, size=24

タグ:

re2c
記事メニュー
ウィキ募集バナー