2014-09-10 18 views
5

Chỉ cần chuyển đến C++ 11 trên GCC 4.8 và sẽ tốt hơn nếu di chuyển ra khỏi boost::iequals có lợi cho STL. Tôi tìm kiếm xung quanh interwebs nhưng tôi không thấy bất kỳ dấu hiệu của std::iequals hoặc mới std::basic_string phương pháp để hỗ trợ này nguyên bản trong STL.C++ 11 có đưa ra thuật toán so sánh chuỗi không phân biệt dạng chữ không?

Nếu điều này không tồn tại trong C++ 11, có cách tiếp cận để giải quyết vấn đề này thay đổi kể từ C++ 03 (tức là cách giải quyết khác nhau?), Hoặc là tăng vẫn ưa thích ở đây?

Cảm ơn trước.`

Trả lời

10

Không, C++ 11 không giới thiệu chức năng so sánh chuỗi phân biệt chữ hoa chữ thường. Bạn sẽ cần phải liên kết với Boost ngay bây giờ.

Hy vọng điều này sẽ hữu ích!

0

Có không có nguồn gốc chuỗi so sánh nhưng với một STL giàu bạn có thể viết riêng của bạn rất đơn giản là một cái gì đó như thế này:

'

bool caseInsensitiveCmp(wstring str1, wstring str2) 
    { 
     if (str1.size() != str2.size()) 
      return false; 
     else 
     return (str1.empty() | str2.empty()) ? 
       false : 
       std::equal(str1.begin(), str1.end(),str2.begin(), 
        [](wchar_t a, wchar_t b) 
        { 
         return tolower(a) == tolower(b); 
        } 
       ); 
    }` 

séc đầu tiên là để bảo vệ std: bằng từ so sánh trên thờ ơ chiều dài.

Các vấn đề liên quan