|
|
我的数据为:
[try].[delete]
怎么样通过sscanf取得try和delete
谢谢
char *s="[try].[delete]"
char s1[8],s2[16];
后面我该怎么写呢?
sscanf(s,".....",s1,s2);???
| fieryfox 回复于:2003-07-16 16:34:11
| sscanf(s, "[%[^]]].[%[^]]", s1, s2);
| | ibm99 回复于:2003-07-17 08:36:44
| 怎么看起来想正规表达式呢?楼上的,"[%[^]]].[%[^]]",能否给个详细的解释?有劳了!
| | fieryfox 回复于:2003-07-17 09:13:32
| 先把楼主的例子改一下
char *s="1try234delete5"
则:
sscanf(s, "1%[^2]234%[^5]", s1, s2);
现在是否就容易理解了?
1、scanf的format中出现的非转换字符(%之前或转换字符之后的字符),即此例中的1234用来跳过输入中的相应字符;
2、‘[]’的含义与正则表达式中相同,表示匹配其中出现的字符序列;^表示相反。使用[ ]时接收输入的变量必须是有足够存储空间的char、signed char、unsigned char数组。记住[也是转换字符,所以没有s了。
| | ibm99 回复于:2003-07-17 09:45:55
| 假如我有这么一段数据,
222,111,,,787,99
我想这样取数据,s1=222,s2=111,s3="",s4=""s5="787",s6="99"
该怎么实现??
| | ibm99 回复于:2003-07-17 11:20:50
| 我这么写一段代码:
#include "stdio.h"
void main()
{
char test[]="222,333,444,,,555,666";
char s1[4],s2[4],s3[4],s4[4],s5[4],s6[4],s7[4];
sscanf(test,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,]",s1,s2,s3,s4,s5,s6,s7);
printf("sssa1=%s",s1);
printf("sssa2=%s",s2);
printf("sssa3=%s",s3);
printf("sssa4=%s",s4);
printf("sssa5=%s",s5);
printf("sssa6=%s",s6);
printf("sssa7=%s",s7);
}
运行后
$ test9
sssa1=222sssa2=333sssa3=444sssa4=sssa5=sssa6=sssa7=$
为什么后面读不出来呢??
| | fieryfox 回复于:2003-07-17 11:44:04
| 呵呵,这样不行的。s4输入为空,输入缓冲区不会往前走,所以后边都是空了。
这样的东西得用strtok_r。
| | nicksean 回复于:2003-07-17 11:45:27
| strtok_r是什么东西?
| | fieryfox 回复于:2003-07-17 11:49:54
| Thread-Safe Function of strtok
| | nicksean 回复于:2003-07-17 11:53:15
| strtok_r,如何使用?
| | fieryfox 回复于:2003-07-17 11:54:40
| 自己查一下吧。
| | 蓝色键盘 回复于:2003-07-17 15:01:32
| fieryfox 回复的很好。
| | db_info 回复于:2003-07-18 09:33:38
| 非常谢谢,顶一下~
| | houhuaw 回复于:2003-07-18 10:42:17
| 感觉fieryfox 好牛啊,这问题都知道。顶
建议版主把此加入精华区
| | ibm99 回复于:2003-07-18 15:17:14
| 功 能: 查找由在第二个串中指定的分界符分隔开的单词
用 法: char *strtok(char *str1, char *str2);
#include <string.h>
#include <stdio.h>
int main(void)
{
char input[16] = "abc,d";
char *p;
/* strtok places a NULL terminator
in front of the token, if found */
p = strtok(input, ",");
if (p) printf("%s\n", p);
/* A second call to strtok using a NULL
as the first parameter returns a pointer
to the character following the token */
p = strtok(NULL, ",");
if (p) printf("%s\n", p);
return 0;
}
| | ibm99 回复于:2003-07-18 15:54:01
| #include <string.h>
#include <stdio.h>
int main(void)
{
char input[16] = "abc,ccc,,ww,h";
char *p;
p = strtok(input, ",");
printf("aaa0=%s\n", p);
p = strtok(NULL, ",");
printf("aaa1=%s\n", p);
p = strtok(NULL, ",");
printf("aaa2=%s\n", p);
p = strtok(NULL, ",");
printf("aaa3=%s\n", p);
p = strtok(NULL, ",");
printf("aaa4=%s\n", p);
return 0;
}
输出为:怎么跳到最后去了??还是不行啊!
:!sscan
[There has been no write since the last change]
aaa0=abc
aaa1=ccc
aaa2=ww
aaa3=h
aaa4=
| | gadfly 回复于:2003-07-19 13:12:02
| 如果分隔符之间为空,strtok会跳过多个相同的分隔符。所以strtok对这种方式应该是没有办法的。
你可以自己写个函数来处理。
| | demostrate 回复于:2003-07-19 16:33:03
| niu ren ===
| | lozity 回复于:2004-05-23 14:20:04
| 真希望有谁写一个函数来对付空字符
| |
|