0

I'm trying to write an algorithm that will take in a string and find the individual words within it, then push that word into a vector.

void setChar(string s) { { int i = 0; while(i != s.size()) { while( i != s.size() && isspace(s[i])) i++; int j = i; while(j != s.size() && !isspace(s[j])) j++; if(i != j) { words.push_back(s.substr(i, j)); cout<<"Successfully stored the word "<<s.substr(i, j)<<endl; i = j; } } return; } } 

The algorithm runs, but gives me weird results. When I put in the string "The turtle is very happy", I get:

Successfully stored the word the

Successfully stored the word turtle is

Successfully stored the word is very happy

Successfully stored the word very happy

Successfully stored the word happy

I tried debugging it, but everything looks good. I track the i / j variables and they're locating the right indexes for the sub-strings. Any idea as to why I would be getting these results?

2

2 Answers 2

2
words.push_back(s.substr(i, j-i)); cout<<"Successfully stored the word "<<s.substr(i, j-i)<<endl; 

Here's your mistake. You find right location but you get substring wrong. Chang j to j-i when get substring.

Sign up to request clarification or add additional context in comments.

Comments

2

The second argument to substr is the number of characters to take, not the index of the last character. To get the result you want, you should use s.substr(i, j-i)

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.