| | |
extract multidigits from a char* (substring)
![]() |
•
•
Join Date: Aug 2008
Posts: 149
Reputation:
Solved Threads: 8
Hi,
given a cstring, I need to extract the digits in it, the digits are prefixed with either a '+' or '-'. Like
I've made a working program that does what I want,
but it seems overly complicated.
Does anyone have an idea if this can be done smarter, better, faster?
Thanks in advance
Btw I checked the program with valgrind and there are no leaks or errors
given a cstring, I need to extract the digits in it, the digits are prefixed with either a '+' or '-'. Like
C Syntax (Toggle Plain Text)
,.,.,.,+3ACT,.,.,.,.-12,.,.,.,.,.,.,.,actgncgt #OUTPUT 3 12
I've made a working program that does what I want,
but it seems overly complicated.
Does anyone have an idea if this can be done smarter, better, faster?
Thanks in advance
Btw I checked the program with valgrind and there are no leaks or errors
c Syntax (Toggle Plain Text)
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(){ char tmp_array[100]; const char* seq = "+1236,,..,,actgn+3ACT-4CCCC"; printf("%s\n",seq); for(int i=0;i<strlen(seq);i++){ if(seq[i]!='+'&&seq[i]!='-') continue; int j=i+1; while(j<strlen(seq)){ if(seq[j]>='0' &&seq[j]<='9'){ j++; }else break; } strncpy(tmp_array,seq+i+1,j-i-1); tmp_array[j-i-1]='\0'; printf("numbers in substrings are: %d\n",atoi(tmp_array)); } return 0; }
•
•
•
•
Does anyone have an idea if this can be done smarter, better, faster?
use it to break the string at each '+' or '-' (the delimiters), then check if the first one or more characters of each resulting string (the tokens) are numerals.
if it does, then push that number onto your result array. if it doesn't, skip on to the next token.
.
Last edited by jephthah; Jul 1st, 2009 at 7:33 pm. Reason: realized you dont want to save the + or -
untested but here...
C Syntax (Toggle Plain Text)
int main() { char tmp_array[100]; const char* seq = "+1236,,..,,actgn+3ACT-4CCCC"; printf("%s\n",seq); while (*seq) { // pre-scan for +- if (*seq != '-' && *seq != '+') { seq++; continue; } char *p = tmparray; *p++ = *seq++; while (*seq) { if ((*seq < '0') || ('9' < *seq)) { break; } *p++ = *seq++; } *p = 0; printf("numbers in substrings are: %d\n",atoi(tmp_array)); } return 0; }
wildgoose: posting "Untested" code on daniweb's C forum is generally risky business 
anyhow, being able to use strtok() correctly is tricky for a new user. Also make sure you understand what is going on with strtol()
.

anyhow, being able to use strtok() correctly is tricky for a new user. Also make sure you understand what is going on with strtol()
c Syntax (Toggle Plain Text)
char string[100]="+1236,,..,,actgn+3ACT-4CCCC"; char *token, *ptr; int value; token = strtok(string,"+-"); printf ("found numbers: "); while (token != NULL) { value = strtol(token,&ptr,10); if (ptr != token) printf(" %d,",value); token = strtok(NULL,"+-"); } printf("\n");
.
Last edited by jephthah; Jul 1st, 2009 at 8:02 pm.
![]() |
Similar Threads
- extract numbers from char (C++)
- How to extract words from char type string (C++)
- Converting specified elements of array of char (C++)
Other Threads in the C Forum
- Previous Thread: adding from 0 to a number that will be entered by the user .
- Next Thread: Program Keeps reading wrong input
| Thread Tools | Search this Thread |
#include adobe api array arrays asterisks binarysearch calculate char cm copyanyfile copyimagefile copypdffile cprogramme creafecopyofanytypeoffileinc createcopyoffile createprocess() csyntax database directory dynamic feet fflush fgets file fork forloop frequency getlasterror givemetehcodez global graphics gtkgcurlcompiling hacking highest homework i/o inches include incrementoperators input interest kernel kilometer km linked linkedlist linux linuxsegmentationfault list locate logical_drives loopinsideloop. match matrix meter microsoft mqqueue mysql number odf open owf pattern pdf performance pointer posix power probleminc process program programming pyramidusingturboccodes radix read recursion recv repetition research scanf scheduling segmentationfault send sequential shape socket socketprograming socketprogramming stack standard string systemcall turboc unix user voidmain() wab win32api windows.h






