0
Trying to use strtok() to seperate words in input
Hi there, I'm trying to get strtok() to take a 50 character input and then display the words seperated by a space. For example if I input hello1 hello2 hello3. Can someone please advise where I'm wrong and why from a learning perspective. https://code.sololearn.com/cUyC49BF0mRg/?ref=app https://code.sololearn.com/cUyC49BF0mRg/?ref=app
24 Respostas
0
Hi. Read this for better scanf understanding https://www.tutorialspoint.com/c_standard_library/c_function_scanf.htm
You should provide another format, not "%s". Also you don't use strtok properly. Example of strtok usage https://www.geeksforgeeks.org/strtok-strtok_r-functions-c-examples/
0
Try to correct solution for yourself. If you are completely stuck here is my solution.
https://code.sololearn.com/cJ9nPA27PzuZ/?ref=app
0
Thanks it seems I'm missing
// Keep printing tokens while one of the
// delimiters present in str[].
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, "-");
}
0
You' re right. Also either use another delimeter instead of spaces or change scanf format
0
char array[50], input;
scanf("%s",&input);
char * token = strtok(input, " " );
while (token){
printf("%s\n", token);
token = strtok(NULL, " ");
return 0;
}
Hi Stephan, I know you suggested to remove %s, however I want to understand why I get error
"Makes pointer from interger without a cast"
What does this mean?
0
Do you know how C stores arrays in memory?
0
Not particularly, I've read the below to gain a better understanding. Makes pointer from interger without cast ? I understand a pointer is a variable with a memory address,
I'm assuming each element in array has got a memory address?
int* p;
// variable p is pointer to integer type
Im assuming in my program it's putting pointer addresses for each " " (space) in array."token" is the variable for these spaces ? was does this without cast referring to
int i;
// integer value
int i2 = *p;
// integer i2 is assigned
https://www.cs.bu.edu/teaching/cpp/string/array-vs-ptr/
0
Oh. I missed this comma in the first line of your code. Remove it.
0
But that doesn't make sense.
Both pointer and array variable store address in memory. Just one address of the first element. Try to run this code
https://code.sololearn.com/c7DmU3vQgFtH/?ref=app
0
Code has errors, so I changed it
0
So as you can see array and pointer variables actually are numbers that represent memory address.
After that you should understand & operator. This operator gives you address where variable is stored.
Suppose we declared char a;
&a gives you addres of value stored in variable.
So you can do something like this
char *p = &a;
0
Ran yours, it worked however it still warned "makes pointer from interger without a cast" I'm trying to understand this error.
Google says:
A char is a form of integer in C. You are assigning it into a char[] which is a pointer. Hence "converting integer to pointer".
0
I had different code in my mind.
0
At first you should add [50] in input declaration and add closing bracket
0
Code should run, but with some warnings
0
char input; - input is single character
char input[50]; - input is memory address
0
Ok thanks.
int main()
{
char str[] = "Geeks-for-Geeks";
// Returns first token
char* token = strtok(str, "-");
// Keep printing tokens while one of the
// delimiters present in str[].
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, "-");
}
return 0;
I think I understand the above now basically a pointer variable is set for each "-" in array elements...which is marked NULL. And while token does not equal NULL print each element in array
0
Hi Stephan, back again. How do you compare a variable, which I'm assuming in "token" is a ptr address to a literal string. Should I be using a function such as strcmp?
https://code.sololearn.com/cy0vNDXAjjKD/?ref=app
0
Hi. You should. Pay attention at return value of strcmp, it becomes zero when strings are equal. Also you should remove ampersand symbols.
0
By the way. When you compare like this
token == "some text"
you actually compare adresses, not values ("some text" has type char[10]).