5

使用してみgetline()ましたが、delimiter「」に設定すると!!プログラムがコンパイルされません。メッセージと呼ばれる文字列変数に文字列を読み込む必要があります。私のコードは次のようになります...

cout << "Enter the message> ";
getline(cin, message, "!!");
4

3 に答える 3

2

std 関数を正しく使用していません。文字ではなく区切り文字に文字列を渡そうとしています。それが必要な区切り文字である場合、getline はすぐには役に立ちません。

http://www.cplusplus.com/reference/string/string/getline/

ここで、達成したいことの実用的なコードを見つけることができます:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string message;
    cout << "Enter the message>";
    cin >> message;
    cout << message.substr(0, message.find("!!")) << endl;

    return 0;
}

シナリオに合わせて、次のコマンドまたは同様のコマンドを実行する必要があります。g++ main.cpp && a.out

出力は次のとおりです。

Enter the message>sadfsadfdsafsa!!4252435
sadfsadfdsafsa
于 2013-09-13T02:07:23.460 に答える
1
str.substr(0, inStr.find("!!"));

例: http://codepad.org/gPoqJ1Ie

説明

dmitri は、エラーが発生した理由を説明します。

于 2013-09-13T02:11:47.813 に答える
0

getline() は、char を区切り文字として「!!」として受け入れます。文字列です

istream& getline (istream& is, string& str, char delim);

それがあなたのコードがコンパイルされない理由です

  1. 入力文字を 1 文字ずつ読み取り、自分でトークン化します。std::string::findメソッドが役立つか、boost.tokenizerを見ることができます。
  2. 使用する '!' getline() または getdelim() のパラメータとして、文字列を読み取って次の '!' を待機し、'!' でない場合は文字列の蓄積を続行します。
于 2013-09-13T01:54:15.187 に答える