I have no idea where this code is flawed - mostly because it works fine when I run the .exe under Win7 (compiled with MSVS2010), but it does not work under Ubuntu (compiled with g++)
Here are the problematic segments:
char * context = nullptr;
ifstream input("file.txt");
string line;
while(getline(input, line)) {
char * line1 = new char[line.size() + 1];
copy(line.begin(), line.end(), line1);
line1[line.size()] = '\0';
char * token = strtok_r(line1, " ", &context);
if(labela(token))
cout << "yes";
else
cout << "no";
// ...
token = (nullptr, " ", &context);
}
// ...
this is the labela(...)
bool labela(char * c) {
if(c == nullptr)
return false;
int i = 0;
while(c[i] != '\0')
++i;
if(c[--i] == ':')
return true;
return false;
}
Whats up with this? I have no idea why it sometimes recognizes a label, and sometimes not.
These are line examples in which it should recognize a label:
label: rest of the line
or
label:
next line
Sometimes it is better to use C++'s own string functions rather than C string functions.
To get the first word of a string, you can simply use
substr()
:You can still use
labela()
: