How to extract all numbers from string in C

3 Answers

0 votes
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

int main() {
    char *s = "abc9836xy%^(s21*9ppp100", *p = s;
    
    while (*p) { 
        if (isdigit(*p) || ((*p == '-' || *p == '+') && isdigit(*(p + 1)))) {
            long n = strtol(p, &p, 10); 
            printf("%ld\n", n); 
        } else {
            p++;
        }
    }
}



/*
run:

9836
21
9
100

*/

 



answered Dec 14, 2020 by avibootz
0 votes
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h> 
 
// long int strtol(const char *str, char **endptr, int base)
 
void extract_all_numbers(char *str) {
    char *p = str;
     
    while (*p) { 
        if (isdigit(*p) || ((*p == '-' || *p == '+') && isdigit(*(p + 1)))) {
            long number = strtol(p, &p, 10); 
            printf("%ld\n", number);
        } else {
            p++;
        }
    }
}
 
int main() {
    char *str = "-1c129c++473java3python+99go8";
     
    extract_all_numbers(str);
 
    return 0;
}
 
 
 
 
/*
run:
 
-1
129
473
3
99
8
 
*/

 



answered Apr 13, 2024 by avibootz
0 votes
#include <stdio.h>
#include <ctype.h> 
 
void extract_all_numbers(char* str, int numbers[]) {
    int numbers_i = 0;
    unsigned char ch;
 
    for (int i = 0; ch = str[i]; i++) {
        if (isdigit(ch)) {
            while (isdigit(ch = str[i])) {
                numbers[numbers_i] = numbers[numbers_i] * 10 + str[i] - '0';
                i++;
            }
            numbers_i++;
        }
    }
}
 
 
int main(void) {
    char str[] = "c 17 2python 8 java 901";
    int numbers[16] = { 0 };
 
    extract_all_numbers(str, numbers);
 
    for (int i = 0; i < numbers[i]; i++) {
        printf("%d\n", numbers[i]);
    }
     
    return 0;
}
 
 
 
 
/*
run:
 
17
2
8
901
 
*/

 



answered Apr 13, 2024 by avibootz

Related questions

1 answer 156 views
2 answers 356 views
356 views asked Nov 22, 2014 by avibootz
1 answer 137 views
1 answer 114 views
114 views asked Feb 9, 2022 by avibootz
1 answer 175 views
1 answer 182 views
...