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"
  • compareToIgnoreCase[] method in Java

0 0 votes

Đánh giá bài viết

so sánh 2 chuỗi
đang là chủ đề được rất nhiều mọi người tìm kiếm. Wiki19 chuyên cung cấp các thông tin thủ thuật về công nghệ mới nhất. Việc lựa chọn nguồn thông tin phù hợp chính xác trở lên hết sức khó khăn. Hôm nay //wiki19.com/ xin giới thiệu đến các bạn [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 . Cùng theo dõi ngay cách làm tại video bên dưới nhé:
– Source code: Nguyên tắc so sánh 2 chuỗi:nVí dụ: so sánh 2 chuỗi s1, s2n- 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ậnn+ kí tự s1 lớn hơn kí tự s2n suy ra: chuỗi s1 lớn hơn chuỗi s2n+ kí tự s1 nhỏ hơn kí tự s2n suy ra: chuỗi s1 nhỏ hơn chuỗi s2n- 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 nhaun- 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 na: 97nb: 98n…nz: 122nnA: 65nB: 66n…nZ: 90tags:strcmp, so sánh 2 chuỗi không phân biệt hoa thường, so sánh 2 chuỗi không biệt kí tự hoa thường, so sánh chuỗi lập trình, 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
B: 66

Z: 90

Tag: strcmp trong c++, strcmp, so sánh 2 chuỗi không phân biệt hoa thường, so sánh 2 chuỗi không biệt kí tự hoa thường, so sánh chuỗi lập trình, so sánh 2 chuỗi

Xem Thêm Bài Viết Về Công Nghệ Khác: //chiasecongnghe.vn/cong-nghe

Nguồn: //chiasecongnghe.vn

8/14/2008 8:01:28 PM

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:

#include // Or, for fewer header dependencies: //#include std::string str1 = "hello, world!"; std::string str2 = "HELLO, WORLD!"; if [boost::iequals[str1, str2]] { // Strings are identical }

321 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, hoặc rõ ràng hơn std::basic_string,. Các char_traitsloại mô tả cách nhân vật so sánh, làm thế nào họ sao chép, làm thế nào họ đúc vv Tất cả bạn cần làm là typedef một chuỗi mới hơn basic_string, và cung cấp cho nó với tùy chỉnh của riêng bạn char_traitsmà so sánh trường hợp insensitively.

struct ci_char_traits : public char_traits { static bool eq[char c1, char c2] { return toupper[c1] == toupper[c2]; } static bool ne[char c1, char c2] { return toupper[c1] != toupper[c2]; } static bool lt[char c1, char c2] { return toupper[c1] < toupper[c2]; } static int compare[const char* s1, const char* s2, size_t n] { while[ n-- != 0 ] { if[ toupper[*s1] < toupper[*s2] ] return -1; if[ toupper[*s1] > toupper[*s2] ] return 1; ++s1; ++s2; } return 0; } static const char* find[const char* s, int n, char a] { while[ n-- > 0 && toupper[*s] != toupper[a] ] { ++s; } return s; } }; typedef std::basic_string ci_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 ]:

bool iequals[const string& a, const string& b] { return std::equal[a.begin[], a.end[], b.begin[], b.end[], [][char a, char b] { return tolower[a] == tolower[b]; }]; }

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 cmpr; cout

Chủ Đề