Hỏi về so sánh chuỗi

#include <iostream>
#include <cstring>

using namespace std;

int linearsearch(string *a, int n, string s){
    int i=0;
    a[n]=s;
    while(strcmp(a[i],s)!=0){
        i++;
    }
    if(i<n){
        return i;
    }
    else return -1;
}

int main()
{
    int n;
    string s;
    cout<<"Nhap so luong nguoi: "<<endl;
    cin>>n;
    string *a = new string[n];
    for(int i=0;i<n;i++){
        getline(cin,a[i]);
    }
    while(1){
    cout<<"Chuoi sau khi nhap: "<<endl;
        for(int i=0;i<n;i++){
            cout<<a[i]<<" ";
        }


    cout<<"\nNhap ten nguoi can tim: ";
    getline(cin,s);
    cout<<"Ket qua tim kiem: "<<linearsearch(a,n,s)<<"\n\n";
    }
    delete[] a;
    return 0;
}

gặp lỗi ở dòng while(strcmp(a[i],s)!=0), mình bị sai đoạn nào vậy mn. Lâu lắm rồi mới sờ vào code quên gần hết :sweat_smile:

1 Like

Cú pháp của hàm strcmp() là:

int strcmp(const char *str1, const char *str2);

Theo mình, lỗi ở đây là do compiler không thể convert ‘std::string’ sang ‘constant char*’.

2 Likes

Hình như thằng string so sánh dc luôn ko cần hàm như char.

#include <iostream>
#include <cstring>

using namespace std;

int linearsearch(string *a, int n, string s){
    int i=0;
    a[n]=s;
    while(a[i]!=s){
        i++;
    }
    if(i<n){
        return i;
    }
    else return -1;
}

int main()
{
    int n;
    string s;
    cout<<"Nhap so luong nguoi: "<<endl;
    do{
        cin>>n;
    }while(n<2);
    cout<<"\nDa nhap thanh cong voi so nguoi la: "<<n<<endl;
    string *a = new string[n];
    for(int i=0;i<n;i++){
        cout<<"Nhap ten nguoi thu: "<<i+1<<endl;
        getline(cin,a[i]);
    }
    cout<<"\n\nChuoi sau khi nhap: "<<endl;
        for(int i=0;i<n;i++){
            cout<<a[i]<<" "<<endl;
    }
    while(1){
    cout<<"\nNhap ten nguoi can tim: ";
    getline(cin,s);
    cout<<"Ket qua tim kiem: "<<linearsearch(a,n,s)<<"\n\n";
    }
    delete[] a;
    return 0;
}

Đã so sánh được nhưng khá kỳ là nó ko cho mình nhập tên người đầu tiên
1

Chỉ cần xóa bộ đệm trước khi getline() thôi bạn.

for(int i = 0; i < n; i++) {
        fflush(stdin);
        cout << "Nhap ten nguoi thu: " << i + 1 << endl;
        getline(cin, a[i]);
    }
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?