Basically my task is having to sort a bunch of strings of variable length ignoring case. I understand there is a function strcasecmp() that compares cstrings, but doesn’t work on strings. Right now I’m using getline() for strings so I can just read in the strings one line at a time. I add these to a vector of strings, then convert to cstrings for each call of strcasecmp(). Instead of having to convert each string to a cstring before comparing with strcasecmp(), I was wondering if there was a way I could use cin.getline() for cstrings without having a predefined char array size. Or, would the best solution be to just read in string, convert to cstring, store in vector, then sort?
Share
I assume by “convert to cstring” you mean using the
c_str()member of string. If that is the case, in most implementation that isn’t really a conversion, it’s just an accessor. The difference is only important if you are worried about performance (which it sounds like you are). Internally std::strings are (pretty much always, but technically do not have to be) represented as a “cstring”. The class takes care of managing it’s size for you, but it’s just a dynamically allocated cstring underneath.So, to directly answer: You have to specify the size of the array when using cin.getline. If you don’t want to specify a size, then use getline and std::string. There’s nothing wrong with that approach.