+ 2

c++ ! operator not working

I have a line of code like this: for (int y = 0; true; ++y) { if (!stringArr[y]) { iter = y; break; } } At runtime I get an error telling me there is "no match for operator!". Why? Is this illegal in c++?

13th Sep 2018, 10:25 PM
jacksonofgames 28
jacksonofgames 28 - avatar
12 Antworten
+ 2
Oh I'm sorry, I didn't make this clear, stringArr is a string array, and I don't think string arrays are able to null terminate. Could you tell me more about std::string[], or how I could check if an item exists?
14th Sep 2018, 2:43 AM
jacksonofgames 28
jacksonofgames 28 - avatar
+ 1
Yes I am trying to check whether stringArr[y] exists or not
14th Sep 2018, 1:51 AM
jacksonofgames 28
jacksonofgames 28 - avatar
+ 1
You can try declare stringArr as std::string[].
14th Sep 2018, 2:29 AM
Sergey Ushakov
Sergey Ushakov - avatar
+ 1
I can tomorrow, I'll get back with you guys
14th Sep 2018, 3:31 AM
jacksonofgames 28
jacksonofgames 28 - avatar
+ 1
In case if your stringArr is just a string you should compare y and stringArr.size(). In case you need iterate through string's characters it's better to use for(char s : stringArr) form of the for loop.
14th Sep 2018, 10:37 AM
Sergey Ushakov
Sergey Ushakov - avatar
+ 1
Here is the full code: #include <iostream> #include <cstdlib> using namespace std; string combiner; string sentence; int iter; void splitString() { string stringArr[sentence.length()]; for (int i = 0; i < sentence.length(); ++i) { if (sentence[i] == ' ' && i != 0) { for (int g = 0; g < i; ++g) { combiner += sentence[g]; if (g + 1 == i) { for (int y = 0; true; ++y) { if (!stringArr[y]) { iter = y; break; } } stringArr[iter] = combiner; combiner = ""; break; } } } } } int main() { cin >> sentence; splitString(); return 0; } This is an attempt to split an inputted string into separate words based on a space. By the way Sergey, stringArr.size() gave me the same error that stringArr.length() did, but thanks for trying
14th Sep 2018, 9:03 PM
jacksonofgames 28
jacksonofgames 28 - avatar
+ 1
if(stringArr [y].empty()); Also you should limit your loop for(int y=0; y<stringArr.lenght();y++) Actually you don't need this loop, because iter already have place, where combiner was stored previously. Just do stringArr[iter++] = combiner; Unfortunately your code don't split sentence in words. You need only one loop to do it. Something like this: for (char c : sentence) if(c !=" ") combiner += c; else if(!combiner.empty()) stringArr[iter++].swap(combiner);
15th Sep 2018, 4:08 AM
Sergey Ushakov
Sergey Ushakov - avatar
+ 1
Can you even split a string into words? It seems like c++ automatically cuts the string off after the first space
15th Sep 2018, 11:43 PM
jacksonofgames 28
jacksonofgames 28 - avatar