| | |
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 |
adobe ansi api array asterisks binarysearch calculate centimeter char character convert copyanyfile copyimagefile copypdffile cprogramme creafecopyofanytypeoffileinc createcopyoffile createprocess() csyntax directory feet fflush file floatingpointvalidation fork forloop frequency givemetehcodez global grade graphics gtkgcurlcompiling hacking highest homework i/o inches infiniteloop interest kernel kilometer km linked linkedlist linux linuxsegmentationfault list locate looping loopinsideloop. match meter microsoft mysql number odf open opendocumentformat openwebfoundation owf pattern pdf performance posix power probleminc process program programming pyramidusingturboccodes radix read recv recvblocked repetition research scanf scheduling segmentationfault send sequential single socket socketprograming socketprogramming stack standard string suggestions systemcall threads turboc unix urboc user variable voidmain() wab win32api windows.h






