标签:
#include "stdafx.h" #include <string> #include <iostream> using namespace std; #include <stdio.h> #include <stdlib.h> #include <malloc.h> void newlineStr(const char *lpszData, int nLineMaxLen) { if (NULL == lpszData || 0 >= nLineMaxLen) { return; } int nLen = strlen(lpszData); //递归出口 if (nLen <= nLineMaxLen) { //可替换为别的有用的函数 printf("lpszLine1:%s\n", lpszData); return; } int i = 0; //字符串移动下标 int k = 0; //记录要截取的长度 // 字段最后一位不是汉字,则直接截取 if ((unsigned char)(lpszData[nLineMaxLen - 1]) < 0xA0) { k = nLineMaxLen; } // 字段最后一位是汉字,而倒数第二位不是汉字则直接截取到倒数第二位 else if ((unsigned char)(lpszData[nLineMaxLen - 1]) >= 0xA0 && (unsigned char)(lpszData[nLineMaxLen - 2]) < 0xA0) { k = nLineMaxLen - 1; } // 从头开始一个个字符的判断, // 看最后一个字符是属于要截取的汉字的一部分, // 还是不属于截取的范围 else { while ( i < nLineMaxLen) { if ((unsigned char)(lpszData[i]) >= 0xA0 && (unsigned char)(lpszData[i + 1]) >= 0xA0) { if (k+2 <= nLineMaxLen) { k += 2; i += 2; } else { break; } } else { if (k+1 <= nLineMaxLen) { k++; i++; } else { break; } } } } char *lpszLine = (char *)malloc(nLineMaxLen + 1); if (NULL == lpszLine) { printf("\nout of memory\n"); return; } memset(lpszLine, ‘\0‘, nLineMaxLen + 1); strncpy(lpszLine, lpszData, k); //可替换为别的有用的函数 printf("lpszLine2:%s\n", lpszLine); // 先释放内存再递归,减少内存占用 if (NULL != lpszLine) { free(lpszLine); lpszLine = NULL; } //移动下一个点继续递归 newlineStr(lpszData + k, nLineMaxLen); return; } int _tmain(int argc, _TCHAR* argv[]) { newlineStr("2007/08/13 16:32:12", 11); newlineStr("测试通知公告", 4); newlineStr("测试通知公告是否成功呵呵", 16); system("pause"); return 0; }
标签:
原文地址:http://www.cnblogs.com/hxb316/p/4255627.html