プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

文字列バッファの基本関数(まとめ)

2010年02月17日 10時28分00秒 | 便利ライブラリ関数

文字列バッファの基本関数をまとめただけです。
関数名をクリックすると各記事にジャンプ移動します。(戻る)

ヘッダ・ファイル - funcString.h

//------------------------------------------------------------------------------
// 文字列バッファの基本操作
//------------------------------------------------------------------------------
#ifndef __FUNCSTRING_INCLUDE__
#define __FUNCSTRING_INCLUDE__

//------------------------------------------------
// 関数のプロトタイプ宣言
//------------------------------------------------
extern LPTSTR funcZeroString( LPTSTR lpBuff, DWORD dwSize );
extern LPTSTR funcFillString( LPTSTR lpBuff, DWORD dwSize, TCHAR tcMoji );
extern LPTSTR funcCopyString( LPTSTR lpBuff, DWORD dwSize, LPCTSTR lpString );
extern LPTSTR funcDupString( LPCTSTR lpString, DWORD dwSize );
extern LPTSTR funcLineString( LPTSTR lpString );
extern LPTSTR funcCRLFString( LPTSTR lpString );

#endif
//------------------------------------------------------------------------------
// End of funcString.h
//------------------------------------------------------------------------------

ソース・ファイル - funcString.cpp

//------------------------------------------------------------------------------
// 文字列バッファの基本操作
//------------------------------------------------------------------------------
#include <Windows.h>
#include "funcString.h"

//------------------------------------------------
// 文字列バッファに NULL 文字を書き込む
//------------------------------------------------
extern LPTSTR funcZeroString( LPTSTR lpBuff, DWORD dwSize )
{
    LPTSTR lpTail;
    
    for ( lpTail = lpBuff ; dwSize ; dwSize-- ){
        *lpTail++ = TEXT('\0');
    }
    return lpBuff;
}

//------------------------------------------------
// 文字列バッファに指定文字を書き込む
//------------------------------------------------
extern LPTSTR funcFillString( LPTSTR lpBuff, DWORD dwSize, TCHAR tcMoji )
{
    LPTSTR lpTail = lpBuff;
    
    if ( dwSize ){
        for ( dwSize-- ; dwSize ; dwSize-- ){
            *lpTail++ = tcMoji;
        }
        *lpTail = TEXT('\0');
    }
    return lpBuff;
}

//------------------------------------------------
// 文字列バッファに指定サイズだけ書き込む
//------------------------------------------------
extern LPTSTR funcCopyString( LPTSTR lpBuff, DWORD dwSize, LPCTSTR lpString )
{
    LPTSTR lpTail = lpBuff;
    
    if ( dwSize ){
        for ( dwSize-- ; dwSize ; dwSize-- ){
            if ( *lpString == TEXT('\0') ){
                break;
            }
            *lpTail++ = *lpString++;
        }
        *lpTail = TEXT('\0');
    }
    return lpBuff;
}

//------------------------------------------------
// 文字列バッファの複製文字列を作成
//------------------------------------------------
extern LPTSTR funcDupString( LPCTSTR lpString, DWORD dwSize )
{
    LPTSTR  lpBuff;
    DWORD   dwByte;
    
    // 文字数からバイト数に変換
    dwByte  = dwSize;
    dwByte *= sizeof(TCHAR);
    dwByte += sizeof(TCHAR);
    dwByte += sizeof(TCHAR);
    
    if ( (lpBuff = (LPTSTR)GlobalAlloc(GPTR,dwByte)) != NULL ){
        funcCopyString( lpBuff, (dwSize + 2), lpString );
        lpBuff[ dwSize ] = TEXT('\0');
    }
    return lpBuff;
}

//------------------------------------------------
// 文字列バッファの行単位で取得
//------------------------------------------------
extern LPTSTR funcLineString( LPTSTR lpString )
{
    static LPTSTR lpSeek;
    static LPTSTR lpGets;
    
    if ( lpString ){
        lpSeek = lpString;
    }
    if ( lpSeek ){
        if ( *lpSeek != TEXT('\0') ){
            for ( lpGets = lpSeek ; *lpSeek != TEXT('\0') ; lpSeek++ ){
                if ( lpSeek[0] == TEXT('\r') ){
                    if ( lpSeek[1] == TEXT('\n') ){
                        *lpSeek++ = TEXT('\0');
                    }
                    goto CRLF;
                }
                if ( lpSeek[0] == TEXT('\n') ){
CRLF:               *lpSeek++ = TEXT('\0');
                    break;
                }
            }
            return lpGets;
        }
    }
    return NULL;
}

//------------------------------------------------
// 文字列バッファの改行コードを削除
//------------------------------------------------
extern LPTSTR funcCRLFString( LPTSTR lpString )
{
    LPTSTR lpDest = lpString;
    LPTSTR lpTail = lpString;
    
    while ( (*lpTail == TEXT('\r')) || (*lpTail == TEXT('\n')) ){
        lpTail++;
    }
    if ( *lpTail != TEXT('\0') ){
        while ( *lpTail != TEXT('\0') ){
            if ( (*lpTail == TEXT('\r')) || (*lpTail == TEXT('\n')) ){
                while ( (*lpTail == TEXT('\r')) || (*lpTail == TEXT('\n')) ){
                    lpTail++;
                }
                *lpDest++ = TEXT('\0');
            }
            else{
                *lpDest++ = *lpTail++;
            }
        }
        *lpDest++ = TEXT('\0');
        *lpDest++ = TEXT('\0');
    }
    return lpString;
}

//------------------------------------------------------------------------------
// End of funcString.cpp
//------------------------------------------------------------------------------

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« クリップボードの基本関数(ま... | トップ | CRC16の計算ソフト - CRC16.exe »
最新の画像もっと見る

コメントを投稿

便利ライブラリ関数」カテゴリの最新記事