Tìm số các kí tự gốc của các từ

Đề:

Code đáp án nhưng có vài chỗ em không hiểu :

int aramic(std::vector<std::string> words)
{
    set<string> s;
    
    for(int i=0; i<words.size(); i++){
        string str = words[i];
        set<string> ch;
        for(int j=0; j<str.length(); j++){
            ch.insert(str[j]);
        }
        string e="";
        for(auto x:ch) e+=x;
        s.insert(e);
    }
    return s.size();
}

Thực sự là em hỏi hơi nhiều nhưng em rất cần sự chỉ giáo của các pro.
1/ Ở trong phần input vì sao một vector <string> hay string lại được gán giá trị thành từng từ như vậy. Trong khi string[chỉ số] em được biết chỉ là một ký tự mà?
image
2/ Vì sao dòng code này

string e="";
        for(auto x:ch) e+=x;
        s.insert(e);

em thay bằng code này thôi

s.insert(ch);

thì nó lại sai ạ? Có phải là kiểu dữ liệu set không thể chèn một kiểu dữ liệu set ?
3/ Vì sao khi em thay set<string> ch cho set<char> ch thì nó cũng lại sai?
Mọi người chịu khó dành ít thời gian giải thích giúp em với ạ. Em cảm ơn nhiều .

Đưa thêm link của codelearn đi bạn. Không có đề thì không hiểu bạn đang nói gì cả.

6 Likes

Có cảm giác như bạn chỉ lo “chạy thật nhanh như một con báo” mà chẳng chịu khó suy nghĩ gì cả.
Chỗ nào đọc code không hiểu thì hãy lấy debugger ra, chạy từng dòng, xét kiểu với giá trị từng biến thì từ từ cũng sẽ hiểu thôi.
Và đừng có code kiểu thử sai như vậy. Lập trình cũng giống trò xếp hình, có điều xếp được khớp với nhau thì cũng chưa chắc ra được chương trình đúng đâu bạn à.

5 Likes

https://codelearn.io/learning/thu-vien-chuan-cpp/45234

“vector of strings” đây:

std::vector<std::string> words

Bài này bạn nên đi từ lời giải chứ đọc code sẽ khó hiểu hơn đấy. std::set ở đây dùng để lọc những đối tượng trùng lắp.

5 Likes

Cảm ơn mọi người đã góp ý :smiley:

Thật sự lời khuyên của anh rất hữu ích, em debug ra 3 câu hỏi rồi ạ. Em cảm ơn :smile:

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