首页 新闻 会员 周边

如何从一个字符串中分别提取出数字(C语言)

0
悬赏园豆:10 [已解决问题] 解决于 2014-09-07 11:50

  INI[maxx,maxy]<m,n>(4,1)<id1,x1,y1;…;idk,xk,yk;>比如这样一个字符串

我需要吧里面的数字全部提取出来,应该怎么做,(是分别提取)

Albery的主页 Albery | 菜鸟二级 | 园豆:207
提问于:2014-09-07 09:17
< >
分享
最佳答案
0

首先回答你的问题:(代码需要string.h、stdlib.h和ctype.h头文件)

 1 size_t find_num(const char *str, int *container, size_t max_size)
 2 {
 3     size_t str_l = strlen(str), i, cur;
 4     int buf = 0;
 5     char flag = 0;
 6 
 7     for(i = 0, cur = 0; i < str_l && cur < max_size; i++) {
 8         if(isdigit(str[i])) {
 9             buf = buf * 10 + str[i] - '0';
10             flag = 1;
11         } else if(flag) {
12             container[cur++] = buf;
13             buf = 0;
14             flag = 0;
15         }
16     }
17     if(flag && cur < max_size)
18         container[cur++] = buf;
19 
20     return cur;
21 }

(注意,没有整型溢出检查,请小心)

该函数需要传递一个字符串、一个储存数字用的数组、以及数组最多储存的个数,储存的类型是int,返回数组实际储存数字的个数。

给一个简单的例子吧:

1 int array[32];
2 size_t l = find_num(str, array, 32), i;
3 for(i = 0; i < l; i++)
4     printf("%d\n", array[i]);

 

“不会”这个词只会让你止步不前。我知道你有用sublime text,想提高查找和替换的效率吗?学会用正则表达式吧。

收获园豆:10
Chielo Newctle | 初学一级 |园豆:177 | 2014-09-07 10:54

谢谢,以前就没有听说过,正则表达式这个概念,学这些东西总是感觉没有方向,课本总是太局限了,有些东西不知道连去哪儿查都没有谱

Albery | 园豆:207 (菜鸟二级) | 2014-09-07 11:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册