最近在写C++的 一个比赛,要求只能用标准库,tr命名空间也不能用;其中一项功能是sql语句的处理

看这个例子:

输入

update TBNAME set (C, s,ss) = (sds,  sds, ds) where COL == value;

首先你不知道括号里有几个参数,最要命的是逗号之间是允许空格的;最最要命的是c++标准库里木有正则表达式支持。

想到sscanf可以简单处理字符串,就想来试试。开始是这样写的:

 

抓不出来啊有木有!!sscanf天生残疾的有木有!!看到空格就自动分割了有木有!!

最后还是在stackoverflow上看着看着找到了灵感:http://stackoverflow.com/questions/2854488/reading-a-string-with-spaces-with-sscanf

由于我不用换行,所以去掉了\n,所以最后就成了这个样子,关键是[^\t]:

虽然在g++中会出现warning:unknown conversion type character ‘(‘ in format [-Wformat]

但是程序员不怕warning只怕error所以没关系~

或者可以改得更完善(注意:sscanf处理大数据执行效率可能较低,所以应就简):

 

尼玛一股幸福感油然而生有木有!!

【最后淡淡地鄙视国内大多数博客不经过大脑复制粘贴的行径,太浪费我时间了