Giải đáp về cin.ignore()

mình có đoạn code sau ạ

#include <iostream>
#include <string>
using namespace std;

string findLongestPrefix(string s1, string s2)
{
    int a = s1.size();
    int b = s2.size();
    int len,i=0;
    if (a>=b) len=b;
    else len = a;
    for (;i<len; i++)
        if (s1[i] != s2[i])
        {
            break;
        }
    return s1.substr(0,i);
}

int main ()
{
    int n;
    cin >> n;
    cin.ignore();
    string s1;
    getline(cin, s1);
    string s2;
    for (int i=0; i < n-1; i++)
    {
        getline(cin, s2);
        s1 = findLongestPrefix (s1,s2);
    }
    cout << s1;
    return 0;
}

khi mình không có cin.ignore() thì sẽ không ra được kết quả ạ.
có thể giải đáp giúp mình về tác dụng của cin.ignore() không ạ?

Vì nó đã loại bỏ 1 kí tự đặc biệt: '\n'. Bạn nhập theo kiểu nhấn Enter chứ gì.
Giải thích:
Ví dụ bạn nhập:

3
dnh
daynhauhoc
dnhday
daynhaudnh

Thì dữ liệu sẽ là:

3\ndnh\ndaynhauhoc\ndnhday\ndaynhaudnh

Ngay sau khi nhập số thì con trỏ nhập hiện vẫn nằm trước kí tự '\n' nếu bạn dùng getline() ngay thì sẽ nhận chuỗi rỗng vì gặp '\n' ngay sau đó. Còn dùng cin.ignore() thì kí tự '\n' bị bỏ qua, con trỏ sẽ nằm ngay trước 'd' của "dnh\n". :slightly_smiling_face:

4 Likes

vâng, e cảm ơn nhiều ạ!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?