C++ Getline after Cin

前端 未结 3 1852
忘掉有多难
忘掉有多难 2021-01-21 22:28

I am trying to write a program which gets user\'s input in a specific way. First, I input a word which contains no space; Then, I input another word which may contains space; An

相关标签:
3条回答
  • 2021-01-21 23:10

    The std::getline function does not skip whitespace like the normal input operator >> does. You have to remove leading (and possible trailing?) whitespace yourself.

    Removing the leading whitespace can be done by first finding the first non-whitespace character (with e.g. std::find_if) and then get a substring from that position to the rest (with std::string::substr).


    Or as dyp suggests, use std::ws. The linked reference have a very good example how to use it.

    0 讨论(0)
  • 2021-01-21 23:10

    getline() reads whitespaces, if you want to ignore the leading whitespaces try:

    cin.ignore();
    getline(cin, b);
    

    EDIT: Sorry, this indeed reads 1 character, this is another solution for you:

        getline(cin, b);
        string noLeadingWS = b.substr(b.find_first_not_of(' '),b.length()-b.find_first_not_of(' '));
        cout << a << ": " << noLeadingWS<< std::endl;
    
    0 讨论(0)
  • 2021-01-21 23:15

    So it looks like your program is just grabbing the space that you put in the program, you can get rid of it several ways!

    1. You can stream the input yourself using cin.get() character by character you add them into a string until you get a space then keep going but don't add the spaces until you get something that isn't a space, then use your getline or you can continue your custom streaming this time looking for a newline!

    2. You can just edit the resulting string to remove the extra spaces super easily, look at the substr() method!

    0 讨论(0)
提交回复
热议问题