This is such a good tutorial. It's all content no filler, but you still spend so much explaining all the details and nuances, which is key.
I'm doing my C programming module at uni atm, and you are like a bible to me. Thanks for helping actually understanding C!
Great video! I love how you explain things in a very easy and straight-forward way. It's just pure content!
thanks, I´ve seen a couple of videos trying to understand strtok and you are the only one who explained it simple and to the point enough for me to understand
Simply excellent. I was initially confused by the nuances of strtok, but this video was quite elucidating.
Thank you, thank you, thank you. This is so good, the explanation. I don't have anything to say as everything has already been said.
pls do more of this (functions, tokens, problems in C/C++ and more) it helped me to become aware bcs seriously,, C/C++ have several functions and I badly needed someone who can explain it to me thoroughly bcs we are in an online setting of classes, so basically, self-study is my thing now. appreciate u dude!!
this video is so smooth and easily understandable.THANKYOU
Thank you! this is a GREAT explanation of what's going on with strtok! I found some example code but couldn't figure out what the heck it was doing. Powerful function to know! Thanks!
excellent explanation. you taught the thing that i was reading on geeks for geeks for an hour in such a short itme
Thanks buddy for saving my life at university 😅👍
After subscribing this channel, i am in love with c coding.
I love you so much. You're the greatest C programmer and teacher the world has ever seen. You've saved me so much stress.
Can I just say that your videos are so incredibly helpful!! I have found many videos on UA-cam helpful but this is the channel that I have come back to the most. Super friendly and easy to follow and understand. Plus so much content! Many thanks from a rookie coder!
Love your videos. Getting me through cs 50 at Dartmouth rn
This man is one of the most important men in the world. I believe that.
Very good thanks for explaining all the details. I think this also helped me digest some of the other stuff i didnt quite get yet
I am not sure if C is as simple as Linux or opposite but considering that in Linux/Unix "one program does one thing" is a mantra, and now seeing that C follows the same... Actually probably it is Linux/Unix that took from C. Irrespective: I like this approach. Yes, there are other functions or languages that do many things at once, but as long as they are built on such simple pieces... I like it ;-)
I have chocked when saw russian subtitles.Thanks for this
Followed a lot of beginner C tutorials. No one talked about String token. Some books even skipped it.
Very detailed video. But, i want to ask, how to store that each string into an array?
You could simply define 2D array of characters:
char pieces[100][100];
int count = 0;
And just copy each piece using strcpy, like so:
strncpy(pieces[count++], piece, 99);
@@CodeVault Wow, superb. Finally it works. Thank you so much for your help. You've got a new subscriber 😁
Thats a nice video. Im still learning c. Quick question at 7:24 could i use memory allocation to store each string so i can select the pieces by its index?
Of course. Usually I suggest you simply make a statically allocated array of char pointers so you don't have to deal with allocating and deallocating elements of that array
Can you make a video about setting up a debugger like yours and how to use it? Also, your videos although short and very specific are very very useful,thanks.
I have this video for VSCode: code-vault.net/lesson/ublnbln8uf:1603733528013
I no longer use DevC++, but that should work out of the box without any configurations needed.
So strtok function has unfreed memory when excited (Hence it can continue tokenizing). So how will this not be a memory leak issue?
Awesome Explanation....Best teacher you are
Amazing and useful series for the amazing C Programming Language. Congrats are in order. 👍️
I would like to ask if it would be possible to make a video (or more than one, perhaps) about handling Unicode and UTF-8 strings (multi-byte strings) in C so we can handle non-ASCII-only, single byte characters as well.
You expalained it very clearly. Thanks for this! Nice recap in the end haha
Excellent tutorial. This video helped me very much. Thank you!
This helped me a lot. Thank you! :D
Careful, he 's a hero.. Best video about strtok.
Just let me say to you a french thanks'you :
Merci beaucoup, cette vidéo est complète et permet de comprendre strtok super simplement : MERCI
Love it!! This will help me for an important program assignment for my uni!
Can you please tell me how to extract part of input string enclosed in " ".
Like input sentence is: printf( "Result is") and I want to extract the part enclosed in double quotes. It's for lexical analyser using c
Just use strtok() as shown in the video with the space character as delimiter
Holy shit. I actually understood this better than i could imagine.
Can you please show us how to scan two strings with strtok at the same time?
I tried doing so and just got both tokens to scan the first string...weird behaviour
here is the code I tested:
int main()
{
char str1[11] = "mat val mat";
char str2[15] = "MAT_A, 8, MAT_B";
char *wanted;
char *args;
wanted = strtok(str1, " ");
args = strtok(str2, " ");
while(wanted || args )
{
if(!wanted && args)
{
printf("Error: too many arguments
");
return 1;
}
if(wanted && !args)
{
printf("Error: too few arguments
");
return 1;
}
printf("args is: %s
wanted is: %s
", args, wanted);
wanted = strtok(NULL, " ");
args = strtok(NULL, " ");
}
if(!args && !wanted)
printf("both strings are null
");
return 0;
}
the output I got was:
args is: MAT_A,
wanted is: mat
args is: MAT_B
wanted is: 8,
both strings are null
You basically can't use strtok for two different strings at the same time. strtok retains the previous string (and works with it) while you pass NULL to it. So, since it has some internal state, you can't just call it again with another string then come back to the previous string by calling strtok with NULL
@@CodeVault wow I can't believe you still reply to a video this old :)
Is there a way to work around it and somehow use two tokens? like maybe using strtok_r or strsep or just creating another tokening function?
I solved my specific problem by just replacing one token for a char array but I still wanna see it be done lol
Hmm... you could do it by retaining the state yourself and never pass NULL to strtok. Something like so:
char str[] = "this is a test";
char* res = strtok(str, " ");
printf("Result is %s
", res);
res = strtok(res + strlen(res) + 1, " ");
printf("Second result is %s
", res);
the best explanation on yt for sure
WOW!!! this is the best explnation ever!!
this video / explaination really helped me out. End was the best tho " 'C' you next time". :D
Awesome, Greetings from Brazil !!!
Hey men i have i question, where is located the function youre using in this video to evaluate each code line youre selecting
one of the best tutorials can you help me with a problem its urgent please..reply ASAP
Juts what I was looking for. Thank you!
very cool explanation!! explained everything very welll
Hello! Just wanted to say that your explanations are very detailed and helpful. Is it possible however to set a barrier token and retrieve the character in between it? Example, I would like to retrieve the number 5000 from the input [5000] where "[ ]" is the barrier token so I can assign that number to a variable later on? Sorry if this sounds confusing and thanks in advance for any help :)
Just use the "[]" string as delimiters for strtok. strtok will split at any of the characters found in that string:
strtok(exampleString, "[]");
I personally prefer to use sscanf although in your example it would require creating a string variable for each word in the string. Might be a bit more work but it's simpler :D
Definitely. If you already know the exact number of words the sentence it's going to have *sscanf* is a much better option. Although *strtok* is mostly for parsing an array of any number of elements, that's where using *sscanf* gets a bit tricky.
The example was supposed to show when you have to parse a string in which is encoded an *unknown* number of elements (in this case, words). In that case, one call to *sscanf* won't be enough. You could use *sscanf* in a while loop (with the format string *%[A-Za-z] %s*) and just keep getting the first word every iteration, which is fancier but requires more work than just using *strtok*.
Thanks for the feedback!
given the position or index of a word in the string, could you remove it with strtok?
No, it won't work.
I suggest using
strcpy(str + wordIndex, str + wordIndex + wordSize);
That will basically copy over the last part of your string (after the word you found) over that word, essentially deleting it.
@@CodeVault i used Strtok() to separate each word, then i iterated through them with a loop and copied the words onto a text file, and when i reached the index that was given, i just skipped copying that word
@@ronjeremy1232 Be careful with that. strtok takes a list of characters to split at, not a full string. So if you give it, let's say, "apple", it will split at the characters 'a', 'p', 'l' and 'e'. Not at the string "apple".
That's why I think you cannot really use it for removing other words.
How would you group elements together? Like say if I wanted "Let's Break" "This String" "Into Pieces"
That is tricky to do with strtok. I suggest you iterate over your string and break it up that way if you need this custom grouping.
Great explanation... 👍👍
Thanks i manged to get it to work but i wanna store each extracted word into an array but it doesn't work i put for example piece = exampleArray [i]; But it doesn't seem to work . Any help would be greatly appreciated thanks!
You will have to use strcpy to copy each piece to the array:
strcpy(exampleArray[i], piece);
I made a video regarding the difference between assigning and strcpy for strings. Maybe it helps:
ua-cam.com/video/VQHK2EZZHb8/v-deo.html
Hi. Thanks for your video!!. I need you help just a litte bit. So my stuff works but It needs more improvement. As you said in 7:45, how can I seperate those spaces and add 0 instead? Or any function to add 0 in the string when there are 2 spaces ?
Like: "a b"now become"a 0 0 b"
I think iterating over the string and manually checking each character (without using strtok) is the best option in this case
Sir what if I want to pass the value of piece, in this case the individual words, as a string argument to another function? How do I do that?
You simply pass it as a char*
int fn(char* in) { ... }
// then, after strtok
fn(piece);
@@CodeVault Hello Sir, very thanks for the response. When I tried to copy your code, it prints the individual values right. However, printing the value is not what I am required to do. What I am required to do Sir is that I need to be able to build a linked list out of the individual pieces that I was able to extract using the strtok() method. So I made a push function that would append each "piece" from the given input string. When I tried to pass the piece and run the code, the output is not the same as the user's. :( I'm afraid the "piece" that was extracted is not of an integer/char type. Please help me sir. Also, may I email you the code for you to be able to fully grasp what I'm saying?
Yeah, then you might have to allocate space for it in the linked list's node and then call strcpy
how to make such function that remembers how many time it was called with same arguments?
static variable?
Yea, that would be a nice solution. You could as well just use a global variable
Thank youuu, the best explanation about strtok.
Which ide/compiler are you using?...
I'm using Dev C++ since it's lightweight and works out of the box. Here's the download link to it: sourceforge.net/projects/orwelldevcpp/
Great explanation. Cheers!
Awesome man keep doing I have the following string could you assist me to split it .
The input as following:-
+CMGR: "REC READ","12345",,"26/05/21,21:26:48+18"hello-world OK
The out out should be as following:-
12345
26/05/21
21:26:48
hello-world
Thank you for the video. It helps me with my H.W.
Damn fine explanation. strtok has been bugging me for ages :D
Can you please tell how can i print only unique characters of the paragraph using this strtok like how can i store and compare the words with the rest of the words
There's the strcmp function that I cover in this lesson here: code-vault.net/lesson/n14gi3en7o:1603733520733
If you store the words in an array and use strcmp over the whole array you should be able to find the unique occurrences
@@CodeVault yeah i have stored the words in an array but how will i use this strcmp function over the whole array i can compare single words using this strcmp function but i dont know how to compare the whole array can u help me by writing a short code or just the part where the words will be compared i have been searching all over the internet for last 3 hours but couldnt find anything helpful
Something like this then:
int i;
for (i = 0; i < numUniqueWords; i++) {
if (strcmp(uniqueWords[i], piece) == 0) {
break;
}
}
// If nothing found
if (i > numUniqueWords) {
strcpy(uniqueWords[++numUniqueWords], piece);
}
Where uniqueWords is your array and numUniqueWords is the number of currently unique words you have. This should be somewhere in the while loop for strtok, that 'piece' there is exactly the result from strtok.
I think the call to strtok_s is wrong. Look at its signature and read at (2): en.cppreference.com/w/c/string/byte/strtok
Seems like it needs 4 parameters. I suggest you just use strtok.
Very very very good video 👍👍👍👍. Thanks!! 🤓😄
Thanks a lot,if you have uploaded any course on udemy or any other online programming site, please tell me.
There's a course on base convertions for number on Skillshare which you can check out here: www.skillshare.com/r/profile/Sergiu-Muresan/798146080
Otherwise, most content on Udemy is free and also on UA-cam
best explanation!!!!!!! keep going Mr. :))) you helped me a lot
Is there a way to count how many spaces there are in the line?
Just iterate over the string's characters and compare each one with a space. There's no function that does this for you afaik.
if i have a sentence " Let's play a game ", can it split and return "Let's play a game" , thanks!
I think you will need to use strspn for this. There's a video about this function: code-vault.net/lesson/lhwc3bt5kq:1603733527132
How can you put the pieces in an string array after this?
You can just assign them the piece variable:
char* strArray[50];
int count = 0;
... // inside the loop
strArray[count++] = piece;
did you ever use this method in making a shell program?
Yes, actually. When you need to get the arguments you need to split at the space character.
Thanks a lot, man. This explanation is really helpful.
but i have question, out of all the loops, why u chose while loop?
Good question! I could've used a for loop instead, and it would look something like this:
for (char* piece = strtok(str, " "); piece != NULL; piece = strtok(NULL, " ")) { ... }
It basically combined 3 lines of code into a really long single line. I just preferred the while loop since it is much easier to understand and explain. Feel free to use either one of them as long as it's easy to understand for you and for your team!
Great Video, I should be paying you my tuition.
Nice explanation!
Thank you so much!
Best go through explanation!!!
Thank you so much for this explanation
Legendary dude, thanks for the explanation!
love u bro !! Great explanation !!
Thank you Dude.
in which biblio this function contains?
In string.h, you can just include it like so at the beginning of your main.c file:
#include
Is it possible to have multiple delimiters?
Yes, just pass multiple characters to the second parameter of strtok and it will break at either one of them.
thanks man it was really helpful!
The best explaination
give strtok in header / title of video ..so that it can come in search
You are Genius mate!!
thank you so much for video saved my day
{"sam","0004","SDE1","VLSI"} how to break this
You could probably just use:
strtok(str, "\",\"");
And ignore the first and the last piece you get (since those are just gonna have the { and } characters)
Thanks a lot....u can explain things so well :D
Great, strtok(Null) is what i'm finding.
How to split string into syllibles?
That depends on the pronuntiation of each word. So probably with a huge lookup table
Great explanation!
thanks, great explaination!
It's really helpful...tq
this function will give you a list that contains the result of the splating, you need to enter in arguments section => the string that you want to split it and the string of split:
std::list strSplice(std::string str, std::string splicer){
std::string sentence = "";
std::list commul;
for(int i = 0; i + splicer.length() < str.length(); i++){
if(str.substr(i, splicer.length()).compare(splicer)){
sentence = sentence + str.substr(i, splicer.length());
}else{
commul.push_back(sentence);
sentence = "";
i += splicer.length() - 1;
}
}
commul.push_back(sentence);
return commul;
}
Yea, this is a nice solution. Only issue is that this in C++ and the video is specifically for C. Make sure you understand the difference between the two
Thanks a lot.
Finally I understood strtok.
clear explanation. Thanks!
guys plz help me strtok is deleting the first letter from each word
@@CodeVault hey thank u so much ^^ I've used strtok_r instead n it's working perfectly. I didn't know that strtok can cause such a bugging
Nice explanation
trust me this is the best explanation on youtube about strtok
Totally agree
agree
I absolutely agree. I've been bashing my head against this for over an hour and I can finally get back to coding!
@@赤金蓮 exactly
Sorry to be off topic but does anybody know of a trick to get back into an instagram account?
I somehow lost the account password. I would love any assistance you can offer me.