- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <wchar.h>
- #include <locale.h>
- #ifndef _WIN32
- #include <iconv.h>
- #endif
- #define NUM 100
- //分隔符
- #define SEP L"|"
- //分隔一组单位数据的位数
- #define UNIT 5
- int main(void)
- {
- int i=0,n=0,num=0,k=0;
- size_t size=sizeof(wchar_t);
- wchar_t buf[NUM*sizeof(wchar_t)];
- int Len=0,Len1=wcslen(SEP);
- setlocale(LC_ALL,"");
- fputws(L"请输入待分隔字符串>>:",stdout);
- wscanf(L"%ls",buf);
- Len=wcslen(buf);
- fputws(L"-------------------\\n"\\
- L"输入的源字符串是:\\n",stdout);
- wprintf(L"%ls\\n",buf);
- if(Len<=UNIT)
- {
- wprintf(L"Input Num Less %d!\\n",UNIT);
- return 0;
- }
- n=Len%UNIT;
- num=Len/UNIT;
- wchar_t* pRet=NULL;
- wchar_t* Pos0=NULL;
- bool m=(n==0?true:false);
- int nUnits=0;
- if(!m)
- {
- nUnits=(num*(UNIT+Len1)+n+Len1+1);
- pRet=(wchar_t*)calloc(nUnits,size);
- wmemset(pRet,'\\0',nUnits);
- wcsncpy(pRet,buf,n);
- wcscat(pRet,SEP);
- ++i;
- }
- else
- {
- nUnits=num*(UNIT+Len1)+1;
- pRet=(wchar_t*)calloc(nUnits,size);
- wmemset(pRet,'\\0',nUnits);
- }
- while (1)
- {
- Pos0=buf+n+UNIT*k;
- if(*Pos0==L'\\0')
- {
- break;
- }
- wcsncat(pRet,Pos0,UNIT);
- wcscat(pRet,SEP);
- ++i;
- ++k;
- }
- fputws(L"-------------------\\n" \\
- L"SEP分隔符分隔UNIT单位的字符:\\n",
- stdout);
- wprintf(L"%ls\\n",pRet);
- Len=Len+i*Len1;
- //剃掉最后一个分隔符
- pRet[Len-1]=L'\\0';
- fputws(L"-------------------\\n" \\
- L"剃掉最后一个分隔符:\\n",
- stdout);
- wprintf(L"%ls\\n",pRet);
- free(pRet);
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/120520149531.html
来源: http://www.codesnippet.cn/detail/120520149531.html