English 中文(简体)
C++ Overloading the >> operator
原标题:

I need to overload the stream extraction operator. I need to do this by allowing a user to input a string of characters at a prompt, say "iamastring", and then the operator would extract each character from the string and test whether or not it is whitespace and if it is not whitespace store it in a character array which is then passed to an object.

@Chip et al. For example output I am not expecting it to output anything to the screen. Instead after a user types in a string and hits enter the user should be prompted again to enter a new menu selection. As it stands right now the user inputs a string hits enter and then a "bad read error" is displayed and the prompt comes back up awaiting new input.

最佳回答

It s quite funny - your name is like mine, but reversed :)

How about:

char buffer[buffSize+1]; // no need for dynamic allocation here
unsigned i = 0;
while(std::cin && !std::isspace(std::cin.peek()) && i < buffSize)
  buffer[i++] = std::cin.get();
buffer[i] =   ; // null termination can be important.
// i now contains the length btw

It s exactly your own code, just a little refactored - I removed all unneccesary stuff etc, nothing more..

Edit: Now fixed to verify stream status & prevent stack overflow :)

Edit II: Changed std::cin.good() && !std::cin.eof() to std::cin. Btw: why does cin have a conversion to void* and not to a bool?

问题回答

Is there any reason you are not using std::string and std::getline? You should think twice or even thrice before writing your own extraction operator - formatted input is not a particularly useful feature of C++ (or of C, come to that).

In any case, the code is broken. It doesn’t handle input failures, which may be fatal since your code can enter an infinite loop. If you encapsulate stream reading operations, you must take care to test whether the stream is in a valid state.





相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签