So sánh chuỗi không phân biệt hoa thường c#
Đề bài: So sánh hai chuỗi ký tự không phân biệt chữ hoa chữ thường (theo mã Ascii). Đề bài này phải gọi là gần giống hệt với bài: So sánh hai chuỗi ký tự (theo mã Ascii), bạn có thể xem qua nhé (mình khuyên là nên xem qua trước 😀 ). Cũng tương tự, chúng ta cần xét xem chuỗi thứ nhất lớn hơn, nhỏ hơn hay bằng chuỗi thứ hai. Chỉ cần sử dụng phương thức compareToIgnoreCase() [alert-announce]Phương thức: public int compareToIgnoreCase(String str) Đối số truyền vào là chuỗi String cần so sánh với chuỗi ban đầu. Phương thức trả về một trong 3 giá trị: 0, số âm, hoặc số dương. Về cách thức hoạt động, compareToIgnoreCase() chỉ khác compareTo() ở chỗ trước khi so sánh, nó sẽ chuyển các chuỗi sang chữ thường sau đó mới thực hiện các công việc còn lại. [/alert-announce] package com.ngockhuong.string; public class Exercise { public static void main(String[] args) { String str1 = "Chuỗi thứ 1"; String str2 = "Chuỗi thứ 2"; System.out.println("String 1: " + str1); System.out.println("String 2: " + str2); // So sánh 2 chuỗi, lưu kết quả vào biến result int result = str1.compareToIgnoreCase(str2); // Kiểm tra giá trị result if (result < 0) { System.out.println("\"" + str1 + "\"" + " nhỏ hơn " + "\"" + str2 + "\""); } else if (result == 0) { System.out.println("\"" + str1 + "\"" + " bằng " + "\"" + str2 + "\""); } else // if (result > 0) { System.out.println("\"" + str1 + "\"" + " lớn hơn " + "\"" + str2 + "\""); } } }Kết quả String 1: Chuỗi thứ 1 String 2: Chuỗi thứ 2 "Chuỗi thứ 1" nhỏ hơn "Chuỗi thứ 2"
0 0 votes Đánh giá bài viết so sánh 2 chuỗi Cảm ơn các bạn đã theo dõi hết bài viết về chủ đề [Lập trình C/C++] Bài 33. Xây dựng hàm so sánh 2 chuỗi có phân biệt hoa thường – strcmp. Rất mong các bạn hài lòng về bài viết, mọi thắc mắc xin comment xuống phía dưới. Mong các bạn ủng hộ website hơn nữa.
Related Articles
Rate this post – Source code: – Nguyên tắc so sánh 2 chuỗi: Ví dụ: so sánh 2 chuỗi s1, s2 – Lấy từng kí tự của chuỗi s1 so sánh với từng kí tự của chuỗi s2 – nếu phát hiện sự khác biệt thì lập tức kết luận + kí tự s1 lớn hơn kí tự s2 suy ra: chuỗi s1 lớn hơn chuỗi s2 + kí tự s1 nhỏ hơn kí tự s2 suy ra: chuỗi s1 nhỏ hơn chuỗi s2 – Nếu 2 kí tự s1 và s2 bằng nhau thì tiếp tục so sánh đến khi nào gặp sự khác biệt hoặc kiểm tra hết tất cả các kí tự của 2 chuỗi mà vẫn không thấy sự khác biệt thì 2 chuỗi bằng nhau – So sánh 2 kí tự: là đang so sánh trên mã ASCII của nó – mã ACII là 1 mã số nguyên a: 97 b: 98 … z: 122 A: 65 Võ Chế Phương · Võ Chế Phương 20:01 14/08/2008 Đã đóng cửa . Câu hỏi này dựa trên ý kiến . Nó hiện không chấp nhận câu trả lời. Đã đóng cửa 3 năm trước . Câu trả lời của câu hỏi này là một nỗ lực của cộng đồng . Chỉnh sửa câu trả lời hiện có để cải thiện bài đăng này. Nó hiện không chấp nhận các câu trả lời hoặc tương tác mới. Cách tốt nhất để thực hiện so sánh chuỗi không phân biệt chữ hoa chữ thường trong C ++ mà không cần biến đổi một chuỗi thành tất cả chữ hoa hoặc tất cả chữ thường là gì? Vui lòng cho biết liệu các phương pháp này có thân thiện với Unicode hay không và mức độ linh hoạt của chúng. 372 hữu ích 4 bình luận 519k xem chia sẻ answer Dương Thùy Dương · Dương Thùy Dương 21:03 24/11/2008 Boost bao gồm một thuật toán tiện dụng cho việc này: #include321 hữu ích 5 bình luận chia sẻ answer Hoàng Ðình Nam · Hoàng Ðình Nam 01:36 22/05/2010 Tận dụng tiêu chuẩn char_traits. Nhớ lại rằng a std::stringtrên thực tế là một typedef cho std::basic_string Chi tiết có trên Guru of The Week số 29 . 121 hữu ích 5 bình luận chia sẻ answer Đặng Đan Khánh · Đặng Đan Khánh 21:49 07/11/2010 Vấn đề với boost là bạn phải liên kết và phụ thuộc vào boost. Không dễ dàng trong một số trường hợp (ví dụ: android). Và việc sử dụng char_traits có nghĩa là tất cả các so sánh của bạn không phân biệt chữ hoa chữ thường, điều này thường không phải là điều bạn muốn. Điều này là đủ. Nó phải hiệu quả một cách hợp lý. Không xử lý unicode hoặc bất cứ điều gì mặc dù. bool iequals(const string& a, const string& b) { unsigned int sz = a.size(); if (b.size() != sz) return false; for (unsigned int i = 0; i < sz; ++i) if (tolower(a[i]) != tolower(b[i])) return false; return true; }Cập nhật: Bonus phiên bản C ++ 14 ( #include 98 hữu ích 5 bình luận chia sẻ answer Phạm Quốc Hiền · Phạm Quốc Hiền 20:46 14/08/2008 Nếu bạn đang sử dụng hệ thống POSIX, bạn có thể sử dụng strcasecmp . Tuy nhiên, chức năng này không phải là một phần của tiêu chuẩn C và cũng không có sẵn trên Windows. Thao tác này sẽ thực hiện so sánh không phân biệt chữ hoa chữ thường trên các ký tự 8-bit, miễn là ngôn ngữ là POSIX. Nếu ngôn ngữ không phải là POSIX, kết quả không được xác định (vì vậy nó có thể thực hiện so sánh được bản địa hóa hoặc có thể không). Không có ký tự tương đương rộng. Không đạt được điều đó, một số lượng lớn các triển khai thư viện C lịch sử có các hàm stricmp () và strnicmp (). Visual C ++ trên Windows đã đổi tên tất cả những thứ này bằng cách thêm dấu gạch dưới trước vì chúng không thuộc tiêu chuẩn ANSI, vì vậy trên hệ thống đó chúng được gọi là _stricmp hoặc _strnicmp . Một số thư viện cũng có thể có các hàm tương đương với ký tự rộng hoặc nhiều byte (thường được đặt tên như wcsicmp, mbcsicmp, v.v.). Cả C và C ++ đều phần lớn không biết về các vấn đề quốc tế hóa, vì vậy không có giải pháp nào tốt cho vấn đề này, ngoại trừ việc sử dụng thư viện của bên thứ ba. Hãy xem IBM ICU (Các thành phần quốc tế cho Unicode) nếu bạn cần một thư viện mạnh mẽ cho C / C ++. ICU dành cho cả hệ thống Windows và Unix. 59 hữu ích 0 bình luận chia sẻ answer Tạ Phi Long · Tạ Phi Long 20:31 14/08/2008 Bạn đang nói về một phép so sánh không phân biệt chữ hoa chữ thường hay một phép so sánh Unicode được chuẩn hóa đầy đủ? So sánh ngu ngốc sẽ không tìm thấy các chuỗi có thể giống nhau nhưng không bằng nhau nhị phân. Thí dụ: U212B (ANGSTROM SIGN) U0041 (LATIN CAPITAL LETTER A) + U030A (COMBINING RING ABOVE) U00C5 (LATIN CAPITAL LETTER A WITH RING ABOVE).Tất cả đều tương đương nhưng chúng cũng có các biểu diễn nhị phân khác nhau. Điều đó nói rằng, Chuẩn hóa Unicode nên là bài đọc bắt buộc, đặc biệt nếu bạn có kế hoạch hỗ trợ Hangul, Thaï và các ngôn ngữ Châu Á khác. Ngoài ra, IBM đã cấp bằng sáng chế khá nhiều cho các thuật toán Unicode được tối ưu hóa nhất và công bố chúng công khai. Họ cũng duy trì một triển khai: IBM ICU 54 hữu ích 1 bình luận chia sẻ answer Phan Anh Thư · Phan Anh Thư 08:51 26/04/2012 boost :: iequals không tương thích với utf-8 trong trường hợp chuỗi. Bạn có thể sử dụng boost :: locale . comparator
33 hữu ích 0 bình luận chia sẻ answer Lê Đại Tú · Lê Đại Tú 11:51 26/08/2008 Suy nghĩ đầu tiên của tôi đối với một phiên bản không phải unicode là làm điều gì đó như sau: bool caseInsensitiveStringCompare(const string& str1, const string& str2) { if (str1.size() != str2.size()) { return false; } for (string::const_iterator c1 = str1.begin(), c2 = str2.begin(); c1 != str1.end(); ++c1, ++c2) { if (tolower(static_cast31 hữu ích 4 bình luận chia sẻ answer Hoàng Nhật Huy · Hoàng Nhật Huy 00:51 02/12/2008 Bạn có thể sử dụng strcasecmptrên Unix hoặc stricmptrên Windows. Một điều chưa được đề cập cho đến nay là nếu bạn đang sử dụng chuỗi stl với các phương thức này, trước tiên sẽ hữu ích khi so sánh độ dài của hai chuỗi, vì thông tin này đã có sẵn cho bạn trong lớp chuỗi. Điều này có thể ngăn việc thực hiện so sánh chuỗi tốn kém nếu ngay từ đầu hai chuỗi bạn đang so sánh không có cùng độ dài. 23 hữu ích 4 bình luận chia sẻ answer Lê Uyển Như · Lê Uyển Như 21:54 19/12/2011 Tôi đang cố gắng tập hợp một câu trả lời hay từ tất cả các bài đăng, vì vậy hãy giúp tôi chỉnh sửa điều này: Đây là một phương pháp thực hiện việc này, mặc dù nó thực hiện chuyển đổi các chuỗi và không thân thiện với Unicode, nhưng nó phải có tính di động, đó là một điểm cộng: bool caseInsensitiveStringCompare( const std::string& str1, const std::string& str2 ) { std::string str1Cpy( str1 ); std::string str2Cpy( str2 ); std::transform( str1Cpy.begin(), str1Cpy.end(), str1Cpy.begin(), ::tolower ); std::transform( str2Cpy.begin(), str2Cpy.end(), str2Cpy.begin(), ::tolower ); return ( str1Cpy == str2Cpy ); }Từ những gì tôi đã đọc, điều này dễ di động hơn stricmp () vì stricmp () trên thực tế không phải là một phần của thư viện std, mà chỉ được thực hiện bởi hầu hết các nhà cung cấp trình biên dịch. Để có được một triển khai Unicode thực sự thân thiện, có vẻ như bạn phải đi ra ngoài thư viện std. Một thư viện tốt của bên thứ 3 là IBM ICU (Các thành phần quốc tế cho Unicode) Ngoài ra boost :: iequals cung cấp một tiện ích khá tốt để thực hiện loại so sánh này. 15 hữu ích 5 bình luận chia sẻ answer Trần Hoàng Điệp · Trần Hoàng Điệp 20:11 14/08/2008 Các hàm chuỗi Visual C ++ hỗ trợ unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx một trong những bạn có thể đang tìm kiếm là _wcsnicmp 14 hữu ích 1 bình luận chia sẻ answer Dương Lan Ngọc · Dương Lan Ngọc 20:29 14/08/2008 FYI, strcmp()và stricmp()dễ bị tràn bộ đệm, vì chúng chỉ xử lý cho đến khi chạm vào dấu chấm dứt rỗng. Nó an toàn hơn để sử dụng _strncmp()và _strnicmp(). 12 hữu ích 3 bình luận chia sẻ answer Ngô Phúc Thịnh · Ngô Phúc Thịnh 09:18 05/04/2017 str1.size() == str2.size() && std::equal(str1.begin(), str1.end(), str2.begin(), [](auto a, auto b){return std::tolower(a)==std::tolower(b);}) Bạn có thể sử dụng đoạn mã trên trong C ++ 14 nếu bạn không có quyền sử dụng boost. Bạn phải sử dụng std::towlowercho các ký tự rộng. 12 hữu ích 1 bình luận chia sẻ answer Phạm Mỹ Uyên · Phạm Mỹ Uyên 21:54 16/09/2015 Xem std::lexicographical_compare: // lexicographical_compare example #includeBản giới thiệu 12 hữu ích 2 bình luận chia sẻ answer Lý Giao Kiều · Lý Giao Kiều 00:57 22/05/2010 Các Boost.String thư viện có rất nhiều thuật toán để thực hiện so sánh trường insenstive và vân vân. Bạn có thể thực hiện của riêng bạn, nhưng tại sao phải bận tâm khi nó đã được thực hiện? 11 hữu ích 3 bình luận chia sẻ answer Đặng Bảo Thư · Đặng Bảo Thư 15:51 30/09/2016 Ngắn gọn và hay. Không có phụ thuộc nào khác, ngoài std C lib mở rộng . strcasecmp(str1.c_str(), str2.c_str()) == 0trả về true nếu str1và str2bằng nhau. strcasecmpcó thể không tồn tại, có thể có chất tương tự stricmp, strcmpivv Mã ví dụ: #includeĐầu ra: true true true true true11 hữu ích 5 bình luận chia sẻ answer Trần Hồng Ngân · Trần Hồng Ngân 21:29 26/06/2013 Đối với nhu cầu so sánh chuỗi không phân biệt chữ hoa chữ thường cơ bản của tôi, tôi không muốn phải sử dụng thư viện bên ngoài, cũng như không muốn một lớp chuỗi riêng biệt với các đặc điểm không phân biệt chữ hoa chữ thường không tương thích với tất cả các chuỗi khác của tôi. Vì vậy, những gì tôi nghĩ ra là: bool icasecmp(const string& l, const string& r) { return l.size() == r.size() && equal(l.cbegin(), l.cend(), r.cbegin(), [](string::value_type l1, string::value_type r1) { return toupper(l1) == toupper(r1); }); } bool icasecmp(const wstring& l, const wstring& r) { return l.size() == r.size() && equal(l.cbegin(), l.cend(), r.cbegin(), [](wstring::value_type l1, wstring::value_type r1) { return towupper(l1) == towupper(r1); }); }Một hàm đơn giản với một hàm quá tải cho char và một hàm khác cho Pier_t. Không sử dụng bất kỳ thứ gì không theo tiêu chuẩn nên sẽ ổn trên mọi nền tảng. So sánh bình đẳng sẽ không xem xét các vấn đề như mã hóa độ dài thay đổi và chuẩn hóa Unicode, nhưng basic_string không hỗ trợ cho điều đó mà tôi biết và nó thường không phải là vấn đề. Trong trường hợp yêu cầu thao tác từ vựng phức tạp hơn đối với văn bản, thì bạn chỉ cần sử dụng thư viện của bên thứ ba như Boost. 9 hữu ích 2 bình luận chia sẻ answer Tạ Quang Khải · Tạ Quang Khải 09:08 12/01/2016 Bạn có thể thực hiện việc này mà không sử dụng Boost bằng cách lấy con trỏ chuỗi C c_str()và sử dụng strcasecmp: std::string str1 ="aBcD"; std::string str2 = "AbCd";; if (strcasecmp(str1.c_str(), str2.c_str()) == 0) { //case insensitive equal }7 hữu ích 0 bình luận chia sẻ answer Dương Quốc Tiến · Dương Quốc Tiến 20:10 14/08/2008 Giả sử bạn đang tìm kiếm một phương pháp chứ không phải một hàm ma thuật đã tồn tại, thành thật mà nói thì không có cách nào tốt hơn. Tất cả chúng ta đều có thể viết các đoạn mã bằng các thủ thuật thông minh cho các bộ ký tự hạn chế, nhưng vào cuối ngày, một lúc nào đó bạn phải chuyển đổi các ký tự. Cách tiếp cận tốt nhất cho việc chuyển đổi này là thực hiện trước khi so sánh. Điều này cho phép bạn rất linh hoạt khi nói đến các lược đồ mã hóa, mà toán tử so sánh thực tế của bạn nên không biết. Tất nhiên, bạn có thể 'ẩn' chuyển đổi này sau hàm hoặc lớp chuỗi của riêng mình, nhưng bạn vẫn cần chuyển đổi các chuỗi trước khi so sánh. 6 hữu ích 0 bình luận chia sẻ answer Tạ Diễm Quỳnh · Tạ Diễm Quỳnh 23:32 17/11/2008 Tôi đã viết một phiên bản không phân biệt chữ hoa chữ thường của char_traits để sử dụng với std :: basic_string để tạo chuỗi std :: không phân biệt chữ hoa chữ thường khi thực hiện so sánh, tìm kiếm, v.v. bằng cách sử dụng các hàm thành viên std :: basic_string tích hợp sẵn. Vì vậy, nói cách khác, tôi muốn làm một cái gì đó như thế này. std::string a = "Hello, World!"; std::string b = "hello, world!"; assert( a == b );... mà std :: string không thể xử lý. Đây là cách sử dụng char_traits mới của tôi: std::istring a = "Hello, World!"; std::istring b = "hello, world!"; assert( a == b );... và đây là cách triển khai: /* --- Case-Insensitive char_traits for std::string's Use: To declare a std::string which preserves case but ignores case in comparisons & search, use the following syntax: std::basic_string6 hữu ích 5 bình luận chia sẻ answer Đặng Thục Oanh · Đặng Thục Oanh 20:29 14/08/2008 Tôi đã có kinh nghiệm tốt khi sử dụng các Thành phần Quốc tế cho thư viện Unicode - chúng cực kỳ mạnh mẽ và cung cấp các phương pháp để chuyển đổi, hỗ trợ ngôn ngữ, hiển thị ngày và giờ, ánh xạ trường hợp (mà bạn dường như không muốn) và đối chiếu , trong đó bao gồm so sánh không phân biệt chữ hoa chữ thường và trọng âm (và hơn thế nữa). Tôi chỉ sử dụng phiên bản C ++ của các thư viện, nhưng chúng dường như cũng có phiên bản Java. Các phương thức tồn tại để thực hiện so sánh chuẩn hóa như được đề cập bởi @Coincoin và thậm chí có thể giải thích cho ngôn ngữ - ví dụ (và đây là một ví dụ phân loại, không hoàn toàn bình đẳng), theo truyền thống trong tiếng Tây Ban Nha (ở Tây Ban Nha), tổ hợp chữ cái "ll" sắp xếp giữa "l" và "m", do đó "lz" <"ll" <"ma". 4 hữu ích 0 bình luận chia sẻ answer Huỳnh Hiếu Học · Huỳnh Hiếu Học 18:47 25/07/2013 Chỉ sử dụng strcmp()cho phân biệt chữ hoa chữ thường và strcmpi()hoặc stricmp()để so sánh không phân biệt chữ hoa chữ thường. Cả hai đều có trong tệp tiêu đề định dạng: int strcmp(const char*,const char*); //for case sensitive int strcmpi(const char*,const char*); //for case insensitiveSử dụng: string a="apple",b="ApPlE",c="ball"; if(strcmpi(a.c_str(),b.c_str())==0) //(if it is a match it will return 0) cout<Đầu ra apple và ApPlE giống nhau a đến trước b, vì vậy táo đến trước quả bóng 4 hữu ích 3 bình luận chia sẻ answer Hoàng Duy Thiên · Hoàng Duy Thiên 00:25 29/09/2015 Đến muộn, nhưng đây là một biến thể sử dụng std::localevà do đó xử lý chính xác tiếng Thổ Nhĩ Kỳ: auto tolower = std::bind1st( std::mem_fun( &std::ctypecung cấp cho bạn một hàm sử dụng ngôn ngữ hoạt động để chuyển đổi các ký tự thành chữ thường, sau đó bạn có thể sử dụng std::transformđể tạo các chuỗi chữ thường: std::string left = "fOo"; transform(left.begin(), left.end(), left.begin(), tolower);Điều này cũng hoạt động đối với các wchar_tchuỗi dựa trên. 3 hữu ích 0 bình luận chia sẻ answer Võ Ngọc Huyền · Võ Ngọc Huyền 07:26 25/11/2008 Chỉ cần ghi chú về bất kỳ phương pháp nào bạn chọn cuối cùng, nếu phương pháp đó có bao gồm việc sử dụng strcmpmột số câu trả lời gợi ý: strcmpnói chung không hoạt động với dữ liệu Unicode. Nói chung, nó thậm chí không hoạt động với các mã hóa Unicode dựa trên byte, chẳng hạn như utf-8, vì strcmpchỉ thực hiện so sánh từng byte và các điểm mã Unicode được mã hóa trong utf-8 có thể mất nhiều hơn 1 byte. Trường hợp Unicode cụ thể duy nhất strcmpđược xử lý đúng cách là khi một chuỗi được mã hóa bằng mã hóa dựa trên byte chỉ chứa các điểm mã dưới U + 00FF - khi đó so sánh byte trên mỗi byte là đủ. 2 hữu ích 0 bình luận chia sẻ answer Nguyễn Thùy Oanh · Nguyễn Thùy Oanh 17:58 01/04/2013 Vào đầu năm 2013, dự án ICU, do IBM duy trì, là một câu trả lời khá tốt cho điều này. http://site.icu-project.org/ ICU là một "thư viện Unicode hoàn chỉnh, di động theo dõi chặt chẽ các tiêu chuẩn ngành." Đối với vấn đề cụ thể về so sánh chuỗi, đối tượng Collation thực hiện những gì bạn muốn. Dự án Mozilla đã thông qua ICU để quốc tế hóa trong Firefox vào giữa năm 2012; bạn có thể theo dõi cuộc thảo luận về kỹ thuật, bao gồm các vấn đề về hệ thống xây dựng và kích thước tệp dữ liệu, tại đây: 2 hữu ích 0 bình luận chia sẻ answer Phạm Nguyên Hạnh · Phạm Nguyên Hạnh 19:57 26/08/2017 Có vẻ như các giải pháp trên không sử dụng phương pháp so sánh và triển khai lại tổng số nên đây là giải pháp của tôi và hy vọng nó phù hợp với bạn (Nó hoạt động tốt). #include2 hữu ích 0 bình luận chia sẻ answer Đỗ Hoài Bắc · Đỗ Hoài Bắc 21:40 26/04/2018 Nếu bạn không muốn sử dụng thư viện Boost thì đây là giải pháp cho nó chỉ bằng cách sử dụng tiêu đề io tiêu chuẩn C ++. #include1 hữu ích 3 bình luận chia sẻ answer Phạm Duy An · Phạm Duy An 13:55 06/03/2015 Nếu bạn phải so sánh một chuỗi nguồn thường xuyên hơn với các chuỗi khác, một giải pháp tuyệt vời là sử dụng regex. std::wstring first = L"Test"; std::wstring second = L"TEST"; std::wregex pattern(first, std::wregex::icase); bool isEqual = std::regex_match(second, pattern);0 hữu ích 5 bình luận chia sẻ answer Đặng Ðan Khanh · Đặng Ðan Khanh 09:33 18/04/2018 Một cách đơn giản để so sánh hai chuỗi trong c ++ (được thử nghiệm cho windows) là sử dụng _stricmp // Case insensitive (could use equivalent _stricmp) result = _stricmp( string1, string2 );Nếu bạn đang muốn sử dụng với std :: string, hãy lấy một ví dụ: std::string s1 = string("Hello"); if ( _stricmp(s1.c_str(), "HELLO") == 0) std::cout << "The string are equals.";Để biết thêm thông tin tại đây: https://msdn.microsoft.com/it-it/library/e0z9k731.aspx 0 hữu ích 3 bình luận chia sẻ answer Hoàng Mạnh Tuấn · Hoàng Mạnh Tuấn 02:40 05/03/2015 bool insensitive_c_compare(char A, char B){ static char mid_c = ('Z' + 'a') / 2 + 'Z'; static char up2lo = 'A' - 'a'; /// the offset between upper and lowers if ('a' >= A and A >= 'z' or 'A' >= A and 'Z' >= A) if ('a' >= B and B >= 'z' or 'A' >= B and 'Z' >= B) /// check that the character is infact a letter /// (trying to turn a 3 into an E would not be pretty!) { if (A > mid_c and B > mid_c or A < mid_c and B < mid_c) { return A == B; } else { if (A > mid_c) A = A - 'a' + 'A'; if (B > mid_c)/// convert all uppercase letters to a lowercase ones B = B - 'a' + 'A'; /// this could be changed to B = B + up2lo; return A == B; } } } điều này có thể được thực hiện hiệu quả hơn nhiều, nhưng đây là một phiên bản cồng kềnh với tất cả các bit của nó. không phải tất cả những thứ đó có thể di động, nhưng hoạt động tốt với bất kỳ thứ gì có trên máy tính của tôi (không có ý tưởng, tôi là hình ảnh chứ không phải lời nói) -1 hữu ích 2 bình luận chia sẻ answer Võ Bích Lam · Võ Bích Lam 14:17 12/05/2015 Một cách dễ dàng để so sánh các chuỗi chỉ khác nhau bằng ký tự viết thường và viết hoa là thực hiện so sánh ascii. Tất cả các chữ cái viết hoa và viết thường khác nhau 32 bit trong bảng ascii, sử dụng thông tin này, chúng tôi có những điều sau đây ... for( int i = 0; i < string2.length(); i++) { if (string1[i] == string2[i] || int(string1[i]) == int(string2[j])+32 ||int(string1[i]) == int(string2[i])-32) { count++; continue; } else { break; } if(count == string2.length()) { //then we have a match } }-4 hữu ích 1 bình luận chia sẻ Xem nguồn: https://stackoverflow.com/questions/11635/case-insensitive-string-comparison-in-c |