How to split string by 2 tocken in c++?
-
Hello i want to split string by two token one '$' and ',' and store them into separate string variable. So what mistake i done in below code?
i made mistake in below code :
#include <string.h> #include <stdio.h> int main () { unsigned char c= 0; char str[80] = "1.5,10,1.3$1.5,11,1.4"; const char s[2] = "$",s1[2]= "," ; char *token,*token1; /* get the first token */ token = strtok(str, s); /* walk through other tokens */ while( token != NULL ) { printf( " %s\n", token ); c++; if(c%3 != 0) token = strtok(NULL, s); token1 = strtok(str, s1); while(token1 != NULL) { printf( " %s\n", token1 ); c++; token1 = strtok(NULL, s1); } } return(0); }actually i want to get output as
1.5,10,1.3
1.5
10
1.31.5
11
1.4but output comes like below :
1.5,10,1.3
1.5
10
1.3
1.5,11,1.4
1.5 -
Hello i want to split string by two token one '$' and ',' and store them into separate string variable. So what mistake i done in below code?
i made mistake in below code :
#include <string.h> #include <stdio.h> int main () { unsigned char c= 0; char str[80] = "1.5,10,1.3$1.5,11,1.4"; const char s[2] = "$",s1[2]= "," ; char *token,*token1; /* get the first token */ token = strtok(str, s); /* walk through other tokens */ while( token != NULL ) { printf( " %s\n", token ); c++; if(c%3 != 0) token = strtok(NULL, s); token1 = strtok(str, s1); while(token1 != NULL) { printf( " %s\n", token1 ); c++; token1 = strtok(NULL, s1); } } return(0); }actually i want to get output as
1.5,10,1.3
1.5
10
1.31.5
11
1.4but output comes like below :
1.5,10,1.3
1.5
10
1.3
1.5,11,1.4
1.5@Qt-embedded-developer Any reason to write C code instead of C++ with Qt classes?
-
@Qt-embedded-developer Any reason to write C code instead of C++ with Qt classes?
@jsulm no reason is there
-
Hello i want to split string by two token one '$' and ',' and store them into separate string variable. So what mistake i done in below code?
i made mistake in below code :
#include <string.h> #include <stdio.h> int main () { unsigned char c= 0; char str[80] = "1.5,10,1.3$1.5,11,1.4"; const char s[2] = "$",s1[2]= "," ; char *token,*token1; /* get the first token */ token = strtok(str, s); /* walk through other tokens */ while( token != NULL ) { printf( " %s\n", token ); c++; if(c%3 != 0) token = strtok(NULL, s); token1 = strtok(str, s1); while(token1 != NULL) { printf( " %s\n", token1 ); c++; token1 = strtok(NULL, s1); } } return(0); }actually i want to get output as
1.5,10,1.3
1.5
10
1.31.5
11
1.4but output comes like below :
1.5,10,1.3
1.5
10
1.3
1.5,11,1.4
1.5@Qt-embedded-developer
I'm not going to work through what your code actually does, and how it compares to the output, but you have:token = strtok(str, s); ... token1 = strtok(str, s1);What do you think this is actually going to do? Once you have called
strtok(str, ...);you should only callstrtok(NULL, ...);to get another token out ofstr.strtok(str, ...);alters (writes a\0into)str. This could be a problem for you.More pertinently:
strtok(NULL, ...)can only work on the single, last string you calledstrtok(str, ...)on. Your code seems to go:strtok(str, s); strtok(str, s1); strtok(NULL, s1); // then you return to the *outer* loop and go strtok(NULL, s);That last line is now operating on the latest
strtok(str, s1)executed, not on the originalstrtok(str, s)which I believe is what you think it is doing. Maybe that's the cause of your output.In any case: don't use
strtok()in modern programs. Either use a re-entrantstrtok_r()which at least allows multiple separate string to tokenised without interfering with each other. Even then it's bad because it still writes into the string. Or, much better as @jsulm says, use C++ methods instead. You ought no longer be usingchar []s,char *s,strtok()and so on in your code. That was for C, now we are C++.P.S.
Instead of C code andstrtok(), in Qt just useQStrings andQString::split()to do your tokenisation work. You won't have these problems that way.