由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - string /File IO processing using C
相关主题
这个有更好的算法吗?低手问个C的scanf问题
re一问很不习惯cin/cout
新手VB.net一问标 题: 发包子 echo 求助
python能检查出space是一个还是两个吗?Re: C里面从一个string取出中间一部分生成新的string
多文本搜索多个字符串c++ string 一问
Re: 为什么用json.dump产生的数字上有双引号?strcmp不用include ???
如何实现 strtok() ?C库函数的实现
array allocation in c请问如何对付error C2148问题:陣列的總大小不能超過 0x7fffffff 位元組
相关话题的讨论汇总
话题: scanf话题: io话题: regex话题: strchr话题: file
进入Programming版参与讨论
1 (共1页)
g****y
发帖数: 436
1
这两天在改一个用C写的处理文件IO和字符串的程序,遇到众多令人头疼的问题,靠着
google和自己的一些想法勉强解决了,但是效率不高,想请教一下这里的大侠:
1。从文件中读取一行,例如:
SR01.01 02 G\t-\t9908\t#@#@$@@#@#@@
现在想得到SR01.01 02 G, -, 9908这三个字符串。
首先想到用scanf("%s%s%s%*s",s1,s2,s3);
但是不工作,因为SR01.01 02 G中间有两个空格。
放狗发现了一个bstrlib.h,里面有一个bsplit,可以使用\t作为delimiter。但是太麻
烦了,所以自己写了一个getTokens。
后来发现c++ programming how to里面有一个写得很好的string类,但是我怕用了以后
导致原来的代码编译出错,所以没敢用。
2。检查子字符串,比如java有一个String.startsWith(),发现C也没有。也只好自己
写了一个。就是用一个循环比较两个字符串。不知道有没有更好的办法。
最后文一下C/C++混合代码的问题,比如
/* mix.c*/
printf("c s
b****j
发帖数: 78
2
1. strtok
2. strncmp

【在 g****y 的大作中提到】
: 这两天在改一个用C写的处理文件IO和字符串的程序,遇到众多令人头疼的问题,靠着
: google和自己的一些想法勉强解决了,但是效率不高,想请教一下这里的大侠:
: 1。从文件中读取一行,例如:
: SR01.01 02 G\t-\t9908\t#@#@$@@#@#@@
: 现在想得到SR01.01 02 G, -, 9908这三个字符串。
: 首先想到用scanf("%s%s%s%*s",s1,s2,s3);
: 但是不工作,因为SR01.01 02 G中间有两个空格。
: 放狗发现了一个bstrlib.h,里面有一个bsplit,可以使用\t作为delimiter。但是太麻
: 烦了,所以自己写了一个getTokens。
: 后来发现c++ programming how to里面有一个写得很好的string类,但是我怕用了以后

c*****t
发帖数: 1879
3
avoid using strtok at all costs. strchr is a better alternative.
scanf technically can scan with delimiter, but usually it is
faster to scan the whole line, then use strchr.

【在 b****j 的大作中提到】
: 1. strtok
: 2. strncmp

D*******a
发帖数: 3688
4
这么麻烦为什么不用regex

【在 g****y 的大作中提到】
: 这两天在改一个用C写的处理文件IO和字符串的程序,遇到众多令人头疼的问题,靠着
: google和自己的一些想法勉强解决了,但是效率不高,想请教一下这里的大侠:
: 1。从文件中读取一行,例如:
: SR01.01 02 G\t-\t9908\t#@#@$@@#@#@@
: 现在想得到SR01.01 02 G, -, 9908这三个字符串。
: 首先想到用scanf("%s%s%s%*s",s1,s2,s3);
: 但是不工作,因为SR01.01 02 G中间有两个空格。
: 放狗发现了一个bstrlib.h,里面有一个bsplit,可以使用\t作为delimiter。但是太麻
: 烦了,所以自己写了一个getTokens。
: 后来发现c++ programming how to里面有一个写得很好的string类,但是我怕用了以后

g****y
发帖数: 436
5
谢谢,刚才看了一下,regex貌似不是standard C library里面的,windows下面能
compile吗?

【在 D*******a 的大作中提到】
: 这么麻烦为什么不用regex
c*****t
发帖数: 1879
6
regex is NOT going to be any easier. It will be a lot slower because
it has to construct NFA as run time.
scanf actually supports a very limited form of regex which can be
efficiently used to match input. Its regex is slightly different
from POSIX, but for most uses, about the same.
If you can master scanf, string functions (strchr, strstr, strcmp etc),
there will be rarely a need to use anything else. More complicated
stuff usually flex.
regex is for people who has no idea. It is really not

【在 g****y 的大作中提到】
: 谢谢,刚才看了一下,regex貌似不是standard C library里面的,windows下面能
: compile吗?

g****y
发帖数: 436
7
多谢大侠指点!能不能推荐一下scanf的一些用法的website或者book?我搜了半天也找
不到怎么用自定义delimiter的内容。

【在 c*****t 的大作中提到】
: regex is NOT going to be any easier. It will be a lot slower because
: it has to construct NFA as run time.
: scanf actually supports a very limited form of regex which can be
: efficiently used to match input. Its regex is slightly different
: from POSIX, but for most uses, about the same.
: If you can master scanf, string functions (strchr, strstr, strcmp etc),
: there will be rarely a need to use anything else. More complicated
: stuff usually flex.
: regex is for people who has no idea. It is really not

g****y
发帖数: 436
8
另外下午测试了一下,用strchr代码上干净很多,但是速度貌似和我的
token【k++】 = str【j++】差不多啊,用了一个有1.5million行text的测试数据文件。

【在 c*****t 的大作中提到】
: regex is NOT going to be any easier. It will be a lot slower because
: it has to construct NFA as run time.
: scanf actually supports a very limited form of regex which can be
: efficiently used to match input. Its regex is slightly different
: from POSIX, but for most uses, about the same.
: If you can master scanf, string functions (strchr, strstr, strcmp etc),
: there will be rarely a need to use anything else. More complicated
: stuff usually flex.
: regex is for people who has no idea. It is really not

b****j
发帖数: 78
9
man scanf
scanf("%[^\t]%*c%[^\t]%*c%[^\t]", s1, s2, s3);

【在 g****y 的大作中提到】
: 多谢大侠指点!能不能推荐一下scanf的一些用法的website或者book?我搜了半天也找
: 不到怎么用自定义delimiter的内容。

g****y
发帖数: 436
10
甚强巨!完全实现了所要的功能!

【在 b****j 的大作中提到】
: man scanf
: scanf("%[^\t]%*c%[^\t]%*c%[^\t]", s1, s2, s3);

D*******a
发帖数: 3688
11
彻头彻尾地被鄙视了

【在 c*****t 的大作中提到】
: regex is NOT going to be any easier. It will be a lot slower because
: it has to construct NFA as run time.
: scanf actually supports a very limited form of regex which can be
: efficiently used to match input. Its regex is slightly different
: from POSIX, but for most uses, about the same.
: If you can master scanf, string functions (strchr, strstr, strcmp etc),
: there will be rarely a need to use anything else. More complicated
: stuff usually flex.
: regex is for people who has no idea. It is really not

1 (共1页)
进入Programming版参与讨论
相关主题
请问如何对付error C2148问题:陣列的總大小不能超過 0x7fffffff 位元組多文本搜索多个字符串
code questionRe: 为什么用json.dump产生的数字上有双引号?
问一下C语言编CGI的路径问题如何实现 strtok() ?
c++ questionarray allocation in c
这个有更好的算法吗?低手问个C的scanf问题
re一问很不习惯cin/cout
新手VB.net一问标 题: 发包子 echo 求助
python能检查出space是一个还是两个吗?Re: C里面从一个string取出中间一部分生成新的string
相关话题的讨论汇总
话题: scanf话题: io话题: regex话题: strchr话题: file