cin.ignore()の使い方

2840 ワード

以前、アルゴリズムの問題でgetline()関数を使ったときcinを使った.ignore()は合格できますが、この関数を使わないと合格できません.最近getline()を使ってこの関数を思い出してテストしました.また、使い方がどうなっているのか気になります.インターネットで他の人のブログを見てみましたが、そんなに分かりにくいと思いますが、ひょうたんを描いて自分でデータを持ってテストしました.基本的には分かりました.次はこの関数を説明します:cin.ignore()関数には2つのパラメータ、すなわちプロトタイプがcinである.ignore(a,b)、aは数値、bは文字、例えばcinである.ignore(7,’a’).この例では、入力ストリームcinから抽出する文字を表し、抽出する文字は捨てられ、1文字を捨てるたびにカウントに1を加算して同時に文字を比較する:カウント値が7に達したり、捨てられた文字がaである場合cin.ignore()関数の実行が終了すると、コードは次のように説明されます.
#include
#include
using namespace std;
int main()
{
    string line;
    cin.ignore(7,'a');
    cin>>line;
    cout<

テストデータの第1セット:
dsfdagfdgcd

aはこの文字列の5番目の文字、5<7であり、aという文字を読むとこの関数は終了し、後ろのすべての文字を出力します.すなわち、出力は:
gfdgcd

第2セットのテストデータ:
dhfdgfghsadfgdfgcd

このときaはこの文字列の10番目の文字であり、10>7であれば、7文字を読み終わった後、この7文字はいずれもaではなく、関数が終了し、8番目の文字から後のすべての文字を出力し、すなわち出力は:
hsadfgdfgcd

この関数にパラメータを与えない場合、そのデフォルトパラメータはcinである.ignore(1,EOF)では、上の内容を見て、このパラメータがどういう意味かを知っていると信じています.それは、1文字を読み終わったり、改行文字が終わったりすることを意味しています.上の内容は見終わってきっと多くのことを理解したので、それでは私の出会った1つの問題も下に置いて説明して、とても理解したはずで、コードは以下の通りです:
#include
#include
using namespace std;
int main()
{
    string line;
    cin.ignore();
    while(getline(cin,line))
        cout<

次のように入力します.
I love everybody
Iloveeverybody
I love everybody

出力は次のとおりです.
 love everybody
Iloveeverybody
I love everybody

最初の行の最初の文字は捨てられ、スペースから他の文字は変わりません.ではcin.ignore()関数はループに配置され、コードは次のとおりです.
#include
#include
using namespace std;
int main()
{
    string line;
    for(int i=3;i>0;i--)
    {
        cin.ignore();
        getline(cin,line);
        cout<

入力は同じで、出力は次のとおりです.
 love everybody
loveeverybody
 love everybody

では、次のコードは自分で試してみて、自分で分析してみてください.もちろん、前に話した個人的な感覚という関数ははっきりしています.もし次のコードが出力がなぜそうなのかを理解できれば、理解できるはずです.コードは以下の通りです.
#include
#include
using namespace std;
int main()
{
    string line;
    while(getline(cin,line))
    {
        cin.ignore();
        cout<

2つのコードを一緒に見ると大きな問題はないはずです.
#include
#include
using namespace std;
int main()
{
    string line;
    cin.ignore();
    while(getline(cin,line))
    {
        cin.ignore();
        cout<

入力は前のコードと同じで、自分のコンパイラでテストしてみるとよくわかります.ここで私が実行結果を持ってみるのは面倒ですが、自分でテストしてみると分かります.1行1行の入力は、3行の入力を直接コピーして貼らないでください.そうしないと、かえってめまいがする可能性があります.