这是我参与新手入门的第3篇文章
背景
获取分割符之间的内容是将传入字符串根据分割符号进行分割,获取指定位置的字符串内容。
遵循规则
首先确定要提取的字符串的位置,进行循环遍历获取指定分隔符前的字符串。
对于每个字符与指定分隔符进行比较,如果比较一致就认为该字符前为分割内容。
对于中文字符分割,需要先判断待分割当前字符是否是中文字符,如果是中文需判断该字符+1位置的字符是否为分隔符。
4、当循环到要提取的字符串的位置,将获取的字符串复制给传出字符串,如果已经获得循环完成分割字段位置小于要提取的字符串的位置,则将传出字符串赋值为0。
示范代码
int isChina(int n, char *s)
{
int f = 0, i;
int Eend;
unsigned char *Buf;
Buf = (unsigned char *)s;
Eend = strlen((char *)Buf);
if (n < Eend)
{
for (i = 0; i <= n; ++i)
switch (f)
{
case 0:
if (Buf[i] > 128)
f = 1;
break;
case 1:
f = 0;
break;
};
}
if ((n == (Eend - 1)) && (f == 1))
f = 0;
return (f);
}
int prv_getSubStr(char *psString, long lNo, char *p3, char cFlag)
{
long lCnt;
char *p1, *p2;
char sOnHanZi[3];
lNo = lNo - 1;
p2 = psString;
for (lCnt = 0; lCnt <= lNo; lCnt++)
{
p1 = p2;
while (*p2 != '\0')
{
memset(sOnHanZi, 0x00, sizeof(sOnHanZi));
memcpy(sOnHanZi, p2, sizeof(char) * 2);
if (isChina(0, sOnHanZi) != 0)
{
p2++;
p2++;
continue;
}
if (*p2 == cFlag)
{
break;
}
p2++;
}
if (*p2 == '\0' || lCnt == lNo)
break;
p2++;
}
if (lCnt < lNo)
{
p3[0] = 0;
return 0;
}
memcpy(p3, p1, p2 - p1);
p3[p2 - p1] = '\0';
return 0;
}
复制代码
函数功能
- 函数名:prv_getSubStr
- 获取分割符之间指定位置的内容
- psString:源字符串
- lNo:位置序号
- p3:目的字符串
- cFlag:分割符
- 返回码 —— 0: 成功
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END