输出任意一个字符串中的整数,小数,科学记数

默伊清风 2014-05-19 01:19:42
输出任意一个字符串中的整数,小数,科学记数
如:
输入样式:fasf32svc 43.66fsadds43e-10
输出样式:32
43.66
43x10^-10
...全文
147 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-05-20
  • 打赏
  • 举报
回复
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
lanlvy 2014-05-19
  • 打赏
  • 举报
回复
引用 8 楼 Baoge_leopard 的回复:
zhao4zhong1老师的链接,我看了看,不知道跟我的问题有啥联系?请叙述点吧
模仿
默伊清风 2014-05-19
  • 打赏
  • 举报
回复
zhao4zhong1老师的链接,我看了看,不知道跟我的问题有啥联系?请叙述点吧
默伊清风 2014-05-19
  • 打赏
  • 举报
回复
正则表达式,挺难理解的呀? 有没有其他方法?
赵4老师 2014-05-19
  • 打赏
  • 举报
回复
zhangwuji154 2014-05-19
  • 打赏
  • 举报
回复
.3 这个字符串,是取.3,还是取3?(在一些应用中,.3表示0.3)
jmcooler 2014-05-19
  • 打赏
  • 举报
回复
我上面的回复,有些个不妥。例如如果出现 e,则后面可能是 -,最后必须是数字 不过只给你提供了思路,自己去找规则,也许你还需要匹配十六进制啊,什么的。 一句话,正则表达式,可以从字符串中匹配并提取你已知格式的子字符串
jmcooler 2014-05-19
  • 打赏
  • 举报
回复
还有,第二组中的点只能出现一次,如果出现了 e,则必须是 e-,如果只出现了 -,不算 因此完整地考虑这个正则表达式,非常费劲。你可以用下面的正则表达式 (\d+)([.e-]*)([\d]+) 先匹配出各组,然后再各组里字符串用程序判断,是否合格
jmcooler 2014-05-19
  • 打赏
  • 举报
回复
用正则表达式提取,是最好的方案: char* regex1 = "[\d.]+"; //数字或点出现1次或以上 char* regex2 = "[\d.e-]+" //数字,点,e,-,出现 1 次或以上 于是,采用下面的正则表达式的联合并以()进行分组: \d+ 必须以至少一个数字开头,第一组 [.e-]* 括号中的字符出现 0 次,或多次,第二组 [\d]+ 后面至少出现一个数字,第三组 不过,第三组,必须要第二组出现,才匹配第三组,于是就要用到后向引用
默伊清风 2014-05-19
  • 打赏
  • 举报
回复
向各大神请教?

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧