/************************************************************************//* C++ trim函数:去掉字符串最左端和最右端的空白符(包括空格/水平制表符等), * 字符串之间的空格就不管它 * " hello word " trim之后变成 “hell word ” * 1 思路: * d 指向字符串的开始位置 * c 指向字符串的前端非空白开始位置 * b 指向字符串的后端非空白开始位置 * 存储结构 char data[] * * test1 * strlen =12values: hi world! strlen =12values:hi worldld! trim right is wrong * /************************************************************************/void mystring::trim2(char *input){ char* pBegin = NULL;//指向字符串的开始位置 char* pEnd = NULL;//指向字符串的开始位置 int iNotCharCount = 0;//指向字符串的前端空白个数 int iCharCount = 0;//指向字符串的前端非空白个数 如何统计 //trim left // 循环条件*pBegin!='\0' 变化条件 pBegin++ for (pBegin = input; *pBegin!='\0'; pBegin++) { //非空 if (*pBegin!=' ') { break; } iNotCharCount++;//统计前端空字符个数 } //trim right char* pTemp = NULL; for (pTemp = pBegin; *pTemp != '\0'; ++pTemp) { if (*pTemp != ' ') { pEnd = pTemp; } } //set string endls pEnd++; *pEnd = '\0'; // iCharCount = pEnd - pBegin+1; //change input else you cant return the right values if (iNotCharCount>iCharCount) { strncpy(input, pBegin, iCharCount); } else { memmove(input, pBegin, iCharCount); cout << "pBegin=" << pBegin << endl; cout << "pEnd=" << pEnd << endl; }}
修订 第二版
void mytrim(char *pData){ char* pTemp = pData; char* pBegin = NULL; char* pEnd = NULL; bool nFirst =false; //获取非空白字符串开始位置和结束位置 while(pData &&*pTemp!='\0') { if(*pTemp!=' ') { pEnd=pTemp;//save the last char string if(nFirst == false) { pBegin = pTemp; //开始位置 } nFirst =true; } ++pTemp;//移动 } //可能没有进入while循环 if(pEnd == NULL || pBegin == NULL) { *pData='\0'; }else { *(++pEnd)='\0'; //trim left int charLength=pEnd-pBegin+1; strncpy(pData,pBegin,charLength); } }