|
发表于 2020-11-8 21:02:56
|
显示全部楼层
本帖最后由 jackz007 于 2020-11-9 15:14 编辑
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int blank(char c)
- {
- if(c == ' ' || c == '\t' || c == ',' || c == '\n') return 1 ;
- else return 0 ;
- }
- int * extract(char s[] , int * x)
- {
- int d , i , m , n , * p ;
- n = strlen(s) ;
- d = 10 ;
- p = (int *) malloc(sizeof(int) * d) ;
- for(i = 0 ; i < n && blank(s[i]) ; i ++) ;
- for(m = 0 ; i < n ;) {
- sscanf(& s[i] , "%d" , & p[m ++]) ;
- for(; i < n && ! blank(s[i]) ; i ++) ;
- for(; i < n && blank(s[i]) ; i ++) ;
- if(m % 10 == 9) {
- d += 10 ;
- p = (int *) realloc(p , sizeof(int) * d) ;
- }
- }
- * x = m ;
- return p ;
- }
- main()
- {
- int k , n , m , * p ;
- n = 1024 * 64 ;
- char s[n] ;
- fgets(s , n , stdin) ;
- s[strlen(s) - 1] = '\0' ;
- p = extract(s , & m) ;
- printf("%d" , p[0]) ;
- for(k = 1 ; k < m ; k ++) printf("\t%d" , p[k]) ;
- printf("\n") ;
- free(p) ;
- }
复制代码
编译、运行实况:
- D:\00.Excise\C>g++ -o x2 x2.c
- D:\00.Excise\C>x2
- 1 9 3 2 3 10 77 55 77 32 55 108 98 2 3 1 208 987
- 1 9 3 2 3 10 77 55 77 32
- 55 108 98 2 3 1 208 987
- D:\00.Excise\C>
复制代码 |
|