2013-03-04 50 views
5

Tôi có câu hỏi về thứ tự chữ cái của chuỗi trong C++. Chúng ta hãy nói rằng tôi có hai chuỗi:
Do < and > trên chuỗi C++ có phản ánh thứ tự chữ cái không?

string x="asd123"; 
    string y="asd136"; 


Chúng ta có thể so sánh các chuỗi với < hoặc> nhà khai thác? Ví dụ: chúng ta có thể nói

if(x>y) 
    cout<<"....."; 

Điều đó luôn làm việc? Cảm ơn.

+7

đọc: http://en.cppreference.com/w/cpp/string/basic_string/operator_cmp – billz

Trả lời

9

Các chuỗi được so sánh theo từ điển (kiểu từ điển), với chuỗi là tập con ngắn hơn của một chuỗi khác sắp tới trước chuỗi dài hơn. Nhưng không nhất thiết phải là chữ cái; nó theo mã hóa ký tự cơ bản. Hầu hết các hệ thống trong những ngày này sử dụng ASCII, vì vậy chữ thường xuất hiện theo thứ tự, và các ký tự chữ hoa xuất hiện theo thứ tự, và các ký tự viết hoa đến trước ký tự chữ thường.

+1

Chữ cái A-Z. Các ký tự "đặc biệt" không phải tiếng Anh, chẳng hạn như å, ä, ö, ń, ǹ, í, ì, é, è, è và nhiều thứ tương tự khác không phân loại tốt mà không làm việc thêm. –

6

Có, so sánh std::string s với std::string::operator> luôn hoạt động. Các chuỗi được so sánh lexicographically. Điều này có nghĩa là mỗi phần tử tương ứng của hai chuỗi được so sánh lần lượt cho đến khi hai được tìm thấy không bằng nhau và thứ tự đó xác định thứ tự của các chuỗi.

Thứ tự từ vựng thực hiện < trên mỗi phần tử của std::basic_string. Tức là, đối với số std::string, mỗi char sẽ được so sánh bằng cách sử dụng <. Nó sẽ chỉ đơn giản so sánh các giá trị của những số char s đó. Theo như C++ là có liên quan, một char chỉ là một giá trị số. Các giá trị này được ánh xạ tới các ký tự trong một chuỗi ký tự bằng bộ ký tự thực hiện (trong đó, đối với trình biên dịch C++ hiện đại, hầu như luôn luôn tương thích ASCII ít nhất).

+1

@pst: 'string' là tập hợp các byte chứ không phải ký tự. So sánh là theo giá trị byte. Không ăn trưa miễn phí. –

+0

@BenjaminLindley Điểm tốt, cảm ơn. –

+0

@pst Chỉnh sửa của tôi bao gồm điều đó. –

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