博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C 字符串分割
阅读量:6278 次
发布时间:2019-06-22

本文共 3994 字,大约阅读时间需要 13 分钟。

hot3.png

 

/******************************************************************************* *  関数名称  :FTLCOM900_SplitChar *                文字列分割処理 *------------------------------------------------------------------------------ *  機能概要  :分解対象文字列を、キーワードで分割する(区切:対象文字を'\0'で *              上書き)。 *              分割した文字列の先頭ポインタを、分割アイテムポインタ配列に設定。 *              分割した文字列が以下の場合は、処理結果チェックエラーとし、出力 *              パラメータにエラー内容を格納する。(格納値はdefine定義参照) *                ・分割した文字列の個数が、iMaxCntより多い場合 *                ・分割した文字列が、 iMaxLenより長い場合 * *  パラメータ: char*  pczInputText  分解対象文字列 *                 char*  pczKeyWord    キーワード。区切り文字群。 *                                         複数の区切り文字を指定することが可能 *                                         例) '?' と '/'と '!' で区切りたい場合 *                                             ""?/!"" と指定する *                 int    iMaxCnt       分解可能な最大件数(分割アイテム確保数) *                 int    iMaxLen       分解文字列の最大長(指定なし:0) *              
int* piItemCnt 分割アイテム取得数 *
char** pArray 分割アイテムポインタ配列 *
int* piErrDetail 処理結果エラー詳細情報 * * リターン値:int FTL_RESULT_NORMAL 処理結果正常 * int FTL_RESULT_CHK_ERROR 処理結果チェックエラー * int FTL_RESULT_SYSTEM_ERROR 処理結果異常(ロジックエラー) ******************************************************************************/int SplitChar(char* pczInputText, char* pczKeyWord, int iMaxCnt, int iMaxLen, int* piItemCnt, char** pArray, int* piErrDetail){ /* ローカル変数の宣言 */ int iCount = 0; /* ループカウンタ */ char czLog[FTL_LOG_MAX_LEN + 1]; /* ログ情報 */ char * pcTemp = NULL; /* 分解文字列のポインタ */ int iInputTextLen = 0; /* 分解文字列の長さ */ /* 分解対象文字列(pczInputText)がNULL場合 */ if ( NULL == pczInputText ) { /* システムエラー(FTL_RESULT_SYSTEM_ERROR)を呼び出し元に返却する */ return FTL_RESULT_SYSTEM_ERROR; } /* キーワード(pczKeyWord)がNULL場合 */ if ( NULL == pczKeyWord ) { /* システムエラー(FTL_RESULT_SYSTEM_ERROR)を呼び出し元に返却する */ return FTL_RESULT_SYSTEM_ERROR; } /* 分割アイテム取得数(piItemCnt) */ if ( NULL == piItemCnt ) { /* システムエラー(FTL_RESULT_SYSTEM_ERROR)を呼び出し元に返却する */ return FTL_RESULT_SYSTEM_ERROR; } /* 分割アイテムポインタ配列(pArray)がNULL場合 */ if ( NULL == pArray ) { /* システムエラー(FTL_RESULT_SYSTEM_ERROR)を呼び出し元に返却する */ return FTL_RESULT_SYSTEM_ERROR; } /* 処理結果エラー詳細情報(piErrDetail)がNULLの場合 */ if ( NULL == piErrDetail ) { /* システムエラー(FTL_RESULT_SYSTEM_ERROR)を呼び出し元に返却する */ return FTL_RESULT_SYSTEM_ERROR; } /* FT_IC_MODULE デバッグログ使用 start */ /* ローカル変数を初期化する */ iInputTextLen = (int)strlen(pczInputText); /* FT_IC_MODULE デバッグログ使用 end */ /* 分解文字列のポインタ(pcTemp)にpczInputTextを設定する */ pcTemp = pczInputText; /* ループ条件:分解文字列(pcTemp)がNULL以外の場合、分割アイテムポインタ配列の設定処理を行う */ while ( 1 == 1 ) { /* 分割アイテム(pArray[iCount])にpcTempを設定する */ pArray[iCount] = pcTemp; /* 分解文字列取得 */ pcTemp = strpbrk(pArray[iCount], pczKeyWord); /* 分解文字列(pcTemp)がNULLの場合 */ if ( NULL == pcTemp ) { /* 分割アイテムポインタ配列の設定処理のLoopを抜ける */ break; } /* 分解文字列(pcTemp[0])に0x00を設定する */ pcTemp[0] = '\0'; /* 分解文字列(pcTemp)にpcTemp + 1を設定する */ pcTemp += 1; /* ループカウンタ(iCount)にiCount + 1を設定する */ iCount++; } /* 分割アイテム取得数設定する */ *piItemCnt = iCount + 1; /* 分割アイテム取得数 > 分解可能な最大件数場合 */ if ( *piItemCnt > iMaxCnt ) { /* 処理結果エラー詳細情報(*piErrDetail)を * FTLCOM900_SPLITCHAR_ERR_CNTに設定する */ *piErrDetail = FTLCOM900_SPLITCHAR_ERR_CNT; /* チェックエラー(FTL_RESULT_CHK_ERROR)を呼び出し元に返却する */ return FTL_RESULT_CHK_ERROR; } /* 分解文字列の最大長チェック要否判定処理を行う * 引数: 分解文字列の最大長(iMaxLen) != FTLCOM900_SPLITCHAR_NOT_CHECK_MAXLENの場合 */ if ( FTLCOM900_SPLITCHAR_NOT_CHECK_MAXLEN != iMaxLen ) { /* ループ条件:ループカウンタが*piItemCntになるまで * 分解文字列の最大長チェック処理を行う */ for ( iCount = 0; iCount < *piItemCnt; iCount++ ) { /* 分解文字列の最大長(iMaxLen) < strlen(pArray[iCount])の場合 */ if ( iMaxLen < (int)strlen(pArray[iCount]) ) { /* 処理結果エラー詳細情報(*piErrDetail)を * FTLCOM900_SPLITCHAR_ERR_LENに設定する */ *piErrDetail = FTLCOM900_SPLITCHAR_ERR_LEN; /* チェックエラー(FTL_RESULT_CHK_ERROR)を呼び出し元に返却する */ return FTL_RESULT_CHK_ERROR; } } } /* 処理結果エラー詳細情報(*piErrDetail)をFTLCOM900_SPLITCHAR_OKに設定する */ *piErrDetail = FTLCOM900_SPLITCHAR_OK; /* 正常終了(FTL_RESULT_NORMAL)を呼び出し元に返却する */ return FTL_RESULT_NORMAL;}

转载于:https://my.oschina.net/guanyun/blog/68112

你可能感兴趣的文章
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>
从源码剖析useState的执行过程
查看>>
地包天如何矫正?
查看>>
中间件
查看>>
Android SharedPreferences
查看>>
css面试题
查看>>
Vue组建通信
查看>>
用CSS画一个带阴影的三角形
查看>>
前端Vue:函数式组件
查看>>