能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这个是正则表达式?
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
正则表达式太复杂了,想求简单的点的办法
本来是想用sscanf搞的
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
char *s="xxxxxxx 8880D yyyyyy"; char buff[2][100]={0}; if ( ( 2 ^ sscanf(s,"%*[^ ] %[0-9]%[D]", buff[0],buff[1] ) )){ printf("match error.\n"); return 0; } printf("%s-%s\n" , buff[0],buff[1] );
为什么说我回复的消息太短了????
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
你的代码如果字符串改成这样就不行了:
“xx xx xxx 8880D”
你试试,麻烦再帮改改
先谢谢了:)
|
能力值:
( LV5,RANK:60 )
|
-
-
6 楼
BOOL CheckString(PCHAR lpTarChar)
{
static char MathChar[11]="0123456789";
ULONG len=strlen(lpTarChar);
if (!len)
return FALSE;
//当前字符的前部是否为连续数字
BOOL IsNum=FALSE;
for (ULONG i=0;i<len;i++)
{
//当前是不是数字
BOOL bNum=FALSE;
for (ULONG n=0;n<10;n++)
{
if(lpTarChar[i]==MathChar[n])
{
bNum=TRUE;
break;
}
}
if (!bNum)
{
//当前字符是D且前面是连续的数字
if (lpTarChar[i]=='D' && IsNum )
{
return TRUE;
}
}
//不是连续数字状态,重置标志位continue
IsNum=bNum;
}
return FALSE;
}
楼主,可以闭眼睛写出来,这纯粹是来逗乐的
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
这个只需要遍历字符串,看数字之后的一个字符是否是'D',这是一种,也可以看'D'前一个字符是否是数字即可。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
楼主好像没有要求'D'之前一定要是连续的数字吧。比如"xxx 3939 398484Dxxx"也是成立的吧。是不是。
|
能力值:
( LV5,RANK:60 )
|
-
-
9 楼
xxx、yyy为任意长度字符串
8880为长度不定数字,为简单起见,假设范围在int型以内
|
能力值:
( LV5,RANK:60 )
|
-
-
10 楼
xxx 3423809423xxx3D xxx
xxx 3423809423 3D xxx
xxx 34238094233D xxx
xxx 3423809423xxx3D xxx
都可以得出正确的结果,是我的注释有误导,谢谢提醒
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
楼主你的问题sscanf 无法胜任吧?也许是我能力有限,,帮不了你啦...
还是老老实实自己写处理算法吧
|
能力值:
( LV4,RANK:50 )
|
-
-
12 楼
我能力有限,这是根据4楼的方式写出来的,但多次使用了sscanf:
int len = strlen(deviceName);
char buff[2][100]={0};
for (char* pstr = Name; pstr < Name + len - 1; pstr++)
{
int num = 0;
pD |= (sscanf(pstr, "%[0-9]%[D]", buff[0], buff[1]) == 2); //test
}
|
能力值:
( LV4,RANK:50 )
|
-
-
13 楼
[QUOTE=淡定疯着;1178024]BOOL CheckString(PCHAR lpTarChar)
{
static char MathChar[11]="0123456789";
ULONG len=strlen(lpTarChar);
if (!len)
return FALSE;
//当前字符的前部是否为连续数...[/QUOTE]
我之所以来问,真不是逗乐
我是想看看sscanf能不能有高级的用法,一句搞定的,4楼的哥们给了一个比较好的用法,只不过还差一点
你的方法是使用的最土的方式,当然是能完成
|
能力值:
( LV5,RANK:60 )
|
-
-
14 楼
不错的习惯,代码写的越薄越好维护和升级,能少一行是一行
|
|
|