Viết 1 hàm so sánh 2 chuỗi đầu vào không phân biệt hoa thường lưu ý không sử dụng thư viện string h

Khi so sánh 2 số trong C thì ta có một số phép toán làm rất đơn giản , >=, 0] printf[" => %s > %s", s1, s2]; if[x == 0]printf[" => %s = %s", s1, s2]; printf["\n\n"]; } while [ strcmp[s1, s2] != 0]; return 0; }

Kết quả:

Enter s1: Hang Enter s2: Ho

x = -1 => Hang < Ho

Enter s1: Hong Enter s2: Hon

x = 1 => Hong > Hon

Enter s1: Hung Enter s2: hung

x = -1 => Hung < hung

Enter s1: Quan Enter s2: Quan

x = 0 => Quan = Quan

2. Nguyên tắc so sánh

Nguyên tắc so sánh 2 chuỗi đó là duyệt lần lượt 2 từng ký tự của 2 chuỗi. So sánh mã ACSII của 2 ký tự đó, mã ký tự nào lớn hơn tức là chuỗi lớn hơn và ngừng so sánh. Nếu một chuỗi nào hết ký tự để so sanh trước thì chuỗi đó bé hơn.

s1 s2 Kết quả Nguyên nhân
Hang Ho Hang < Ho do a < o [97 < 111]
Hong Hon Hong > Hon do s2 hết ký tự để so sánh
Hung hung Hung < hung do H < h [72 < 104]
Quan Quan Quan = Quan 2 chuỗi giống nhau hoàn toàn

Tham khảo bảng mã ACSII

Mình xin thảo luận về công dụng của các hàm thường sử dụng trong chuỗi:

Chú ý khi sử dụng các hàm này ta phải khai báo thư viện #include "string.h"

1.Hàm strcpy:

  • Công dụng: sao chép chuỗi nguồn vào chuỗi đích.

  • Cấu trúc:

char*strcpy[char *dich, char *nguon];

Có nghĩa là khi ta nhập vào một dãy các kí tự ở chuỗi nguồn thì nó sẽ sao chép tất cả các kí tự vừa nhập vào cái chuỗi đích.

#include #include #include int main[] { char A[255],B[255]; printf["Nhap chuoi: "]; gets[A]; strcpy[B,A]; printf["Chuoi dich: "]; puts[B]; getch[]; return 0; }

Chương trình trên khi ta nhập vào mảng A một dãy các kí tự là “abc” thì khi gap hàm strcpy[B,A]; thì nó sẽ copy 3 kí tự “abc” từ mảng A vào mảng B.

Nếu chúng ta muốn copy n kí tự từ chuỗi nguồn vào chuỗi đích ta dùng hàm sau:

2.Hàm strncpy:

  • Công dụng: sao chép n kí tự đầu tiên của chuỗi nguồn vào chuỗi đích.

  • Cấu trúc:

char *strncpy[char *dich, char *nguon,int n];

3.Hàm strlen:

  • Công dụng :cho biết độ dài của chuỗi s

  • Cấu trúc:

int strlen[char *s]
  • Ví dụ: Sử dụng hàm strlen xác định độ dài một chuỗi nhập từ bàn phím.
#include #include #include int main[] { char Chuoi[255]; int Dodai; printf["Nhap chuoi: "]; gets[Chuoi]; Dodai = strlen[Chuoi]; printf["Chuoi vua nhap:"]; puts[Chuoi]; printf["Co do_dai %d",Dodai]; getch[]; return 0; }

4.Hàm strcat:

  • Công dụng: ghép chuỗi nguồn vào sau chuỗi đích.

  • Cấu trúc:

char *strcat[char *dich,char *nguon]
  • Ví dụ: Nhập vào họ lót và tên của một người, sau đó in cả họ và tên của họ lên màn hình.
#include #include #include int main[] { char HoLot[30], Ten[12]; printf["Nhap Ho Lot: "]; gets[HoLot]; printf["Nhap Ten: "]; gets[Ten]; strcat[HoLot,Ten]; /* Ghep Ten vao HoLot*/ printf["Ho ten la: "]; puts[HoLot]; getch[]; return 0; }

5.Hàm strncat:

  • Công dụng: ghép n kí tự đầu tiên của chuỗi vào sau chuỗi đích

  • Cấu trúc:

char *strncat[char *dich,char *nguon,int n];

6.Hàm strcmp:

  • Công dụng: so sánh 2 chuỗi s1 và s2

  • Cấu trúc:

int strcmp[char *s1,char *s2];

Hàm sẽ trả về 1 trong các giá trị sau:

  • Giá trị âm
    nếu chuỗi s1 nhỏ hơn chuỗi s2

  • Giá trị 0 nếu
    hai chuỗi bằng nhau

  • Giá trị dương nếu chuỗi s1 lớn hơn chuỗi s2

Ví dụ:

char *chu1 = "aaa", *chu2= "bbb", *chu3 = "aaa"; strcmp[chu1, chu2]; //kết quả trả về - 1 strcmp[chu1, chu3]; //kết quả trả về 0 strcmp[chu2, chu3]; //kết quả trả về 1 ví dụ minh họa đây: /* Nhap danh sach ten va sap xep theo thu tu tang dan*/ #include #include #include #define MAXNUM 5 #define MAXLEN 10 int main[void] { char ten[MAXNUM][MAXLEN]; //mang chuoi char *c[MAXNUM]; //mang con tro tro den chuoi char *ct; int i, j, n = 0; //nhap danh sach ten while [n < MAXNUM] { printf["Nhap vao ten nguoi thu %d: ",n + 1]; gets[ten[n]]; c[n++] = ten[n]; //con tro den ten } //sap xep danh sach theo thu tu tang dan for [i = 0; i < n - 1; i ++] for [j = i + 1; j < n; j ++] if [strcmp[c[i], c[j]] > 0] { ct = c[i]; c[i] = c[j]; c[j] = ct; } //In danh sach da sap xep printf["Danh sach sau khi sap xep:\n"]; for [i = 0; i < n; i ++] printf["Ten nguoi thu %d : %s\n", i + 1, c[i]]; getch[]; }

7.Hàm strlwr:

  • Công dụng: chuyển tất cả các kí tự chuỗi về chữ thường

  • Cấu trúc:

char *strlwr[char *s];

8.Hàm strupr :

  • Công dụng: chuyển tất cả các kí tự chuỗi thường về chữ hoa

  • Cấu trúc:

char *strupr[char *s]
  • Ví dụ: Viết chương trình nhập vào một chuỗi ký tự từ bàn phím. Sau đó sử dụng hàm strupr[]; để chuyển đổi chúng thành chuỗi chữ hoa.
#include #include #include int main[] { char Chuoi[255],*s; printf["Nhap chuoi: "]; gets[Chuoi]; s=strupr[Chuoi] ; printf["Chuoi chu hoa:"]; puts[s]; getch[]; return 0; }

9.Hàm strrev :

  • Công dụng: đảo ngược chuỗi kí tự

  • Cấu trúc:

char *strrev[char *s];

10.Hàm strchr:

  • Công dụng: trả về địa chỉ vị trí xuất hiện đầu tiên của kí tự ch trong chữ s và sẽ trả về giá trị
    NULL trong trường hợp không tìm thấy.

  • Cấu trúc:

char *strchr[char *s,int ch];

11.Hàm strrchr:

char *strrchr[char *s,char ch];
  • Công dụng: trả về địachỉ vị trí xuất hiện cuối cùng của kí tự ch trong chuỗi s. Nếu không tìm thấy hàm sẽ trả về giá trị NULL

12.Hàm strstr:

  • Công dụng: trả về địa chỉ vị trí xuất hiện đầu tiên của chuỗi s1 trong chuỗi s và sẽ trả về giá trị NULL trong trường hợp không tìm thấy.

  • Cấu trúc:

char *strstr[char *s, char *s1];

Ví dụ: Viết chương trình sử dụng hàm strstr[] để lấy ra một phần của chuỗi gốc bắt đầu từ chuỗi “hoc”.

#include #include #include int main[] { char Chuoi[255],*s; printf["Nhap chuoi: "]; gets[Chuoi]; s=strstr[Chuoi,"hoc"]; printf["Chuoi trich ra:"]; puts[s]; getch[]; return 0; }

13. Hàm memset

  • Công dụng: Set num byte nhớ từ vị trí được trỏ tới bằng giá trị value

  • Cấu trúc:

void *memset [void *ptr, int value, size_t num];

14. Hàm memcpy

  • Công dụng: Chép num byte từ vị trí mà source trỏ tới đến vị trí mà destination trỏ tới

  • Cấu trúc:

void *memcpy [void *destination, const void *source, size_t num];

15. Hàm memcmp

  • Công dụng: So sánh giá trị các vùng nhớ mà ptr1 và ptr2 trỏ tới theo từng byte, sẽ dừng lại khi so sánh đủ num byte. Trả về -1 khi byte đầu tiên mà không trùng nhau của 2 vùng so sánh của ptr1 nhỏ hơn ptr2, trả về 0 khi 2 vùng nhớ bằng nhau, trả về 1 khi byte đầu tiên mà không trùng nhau của 2 vùng so sánh của ptr1 lớn hơn ptr2

  • Cấu trúc:

int memcmp[const void *ptr1, const void *ptr2, size_t num];

16.Hàm stricmp:

  • Công dụng : So sánh 2 chuỗi không phân biệt chữ hoa chữ thường , hàm trả về tương tự strcmp.
  • Cấu trúc :
int stricmp [const char * string1, const char * string2]; Ví dụ này sử dụng stricmp [] để so sánh hai chuỗi. #include #include int main [void] { / * So sánh hai chuỗi như là chữ thường * / if [0 == stricmp [ "hello", "Hello"]] if [0 == stricmp["hello", "HELLO"]] printf["The strings are equivalent.\n"]; else printf["The strings are not equivalent.\n"]; return 0; }

The output:
" The strings are equivalent."

Có gì sai sót mọi người xin đóng góp ý kiến nhá bấm vào cây bút Wiki để sửa nhé

36 Likes

cứ như thế này thiếu j tài nguyên cơ chứ a @ltd ?! cái bài này ví dụ lên để trong markdown. còn nữa mình giải thích cách dùng hạn chế post code thừa! như vật thì dễ hơn đối với người xem và người viết

2 Likes

mình làm cũng chưa hoàn chỉnh lắm

nhờ các bạn đóng góp thêm

2 Likes

@quanpham ơi, em dùng Markdown để post code nhé

Cách post Code dùng Markdown trong Category Programming meta

Làm sao để có thể hiển thị syntax highlighting bằng markdown? Các bạn phải đánh dấu ``` như ví dụ dưới đây Chú ý, dấu ``` được tạo ra bởi nút nằm bên trái số 1 trên bàn phím, nút này sẽ là ~ khi bấm giữ Shift Ví dụ cho C Nội dung: ``` void main[] { } ``` Và đừng quên ``` ở cuối Kết quả void main[] { } Ví dụ cho Pascal Nội dung: ``` Program HelloWorld; Begin WriteLn['Hello world!'] {no ";" is required after the last statement of a block - adding one adds a "null stateme…

P/S: Em làm rất tốt, cố gắng chỉnh sửa sao cho hoàn chỉnh là được.

@Honey_moon em cũng bắt tay vào làm Open Source đi chứ

3 Likes

hi hèn gì em viết code mãi mak k dc hi

1 Like

Em có thể sửa bài bằng cách

Cách sửa bài viết trên diễn đàn DNH meta

Bấm vào hình cây bút bạn sẽ sửa được bài [image]

P/S: @quanpham em có muốn bài viết của em trở thành Wiki không? Nếu nó là Wiki thì ai cũng có thể sửa đổi và làm cho nó tốt hơn. Anh mới sửa 1 ít, nhưng anh nghĩ nhiều người khác cùng sửa thì nhanh hơn.

Việc đổi sang Wiki post hay không là ý của em. Nhưng chuyển sang Wiki Post có nghĩa là open source, ai cũng có thể xem và sửa. Em có muốn Open Source bài viết của mình không?

2 Likes

ltd:

m có muốn Open Source bài viết của mình không?

được chứ em đăng bài là để mọi người xem mak hi

2 Likes

Thở không ra hơi luôn, sửa cái bài của @quanpham mệt quá. Em coi lại cách trình bày nhé, anh sửa quá chừng sửa. Nhìn vào history đi

Bài này vẫn còn thiếu ví dụ, ai có ví dụ thì điền thêm vào nhé. Sử dụng tính năng Wiki Post ai cũng có thể sửa bài cả.

1 Like

A Đạt ơi, a nên sửa lại cái quyền edit wiki đi. Chứ ai cũng edit đc thì loạn lắm

E chỉ vào cái edit nó báo là “basic users can edit it”.

@ltd

1 Like

em mới bổ sung thêm cái code nữa hi, để em tìm rồi bổ sung thêm

1 Like

DungJun:

Chứ ai cũng edit đc thì loạn lắm

Anh tin tưởng mọi người mà, có thể sau này anh chỉ cho Regular mới có quyền sửa nếu xảy ra tình trạng phá hoại. Nhưng anh tin mọi người

2 Likes

@quanpham ơi, anh nghĩ là em nên tách ra, mỗi topic chỉ nói về một hàm thôi, để sau này có ai thắc mắc về lĩnh vực gì, anh chỉ việc link tới topic đó, chứ để nhiều hàm và đặt cái tên “xử lý chuỗi thông dụng” thì khó tìm kiếm lắm.

Anh thấy @kayz làm rất tốt này.

Ý tưởng nhóm phát triển mã nguồn mở PHP - Dạy Nhau Học dev chat

Mình thấy nước ngoài có rất nhiều ý tưởng hay và FREE nhưng tại VN, mình thấy chúng lại phải trả tiền mới có được. Thế nên cái ý tưởng này mới nảy ra, đó là phát triển mã nguồn mở PHP. Mình sẽ ủng hộ Open Source, để OpenSource phát triển mạnh mẽ và có một cộng đồng Việt khiến ai cũng biết. Chúng ta sẽ bàn về PHP cũng như là thiết kế Web, JQuery, CSS nói chung. Các bạn sẽ cùng nhau thảo luận các hàm, phương thức, lớp hay một sản phẩm nào đó mà chính chủ là Người Việt - hàng Việt chất lượng …

Cả @Gio nữa

2 Likes

em hiểu ý anh rồi . có nghĩa mình làm mỗi hàm mỗi cái topic phải không @ltd

1 Like

Máy hàm nào giống nhau về chức năng có thể viết Gộp mà chẳng hạng câu lệnh lặp

ltd:

@quanpham ơi, anh nghĩ là em nên tách ra, mỗi topic chỉ nói về một hàm thôi, để sau này có ai thắc mắc về lĩnh vực gì, anh chỉ việc link tới topic đó, chứ để nhiều hàm và đặt cái tên “xử lý chuỗi thông dụng” thì khó tìm kiếm lắm.

topic này e để a đạt sửa và góp ý vậy! thiết nghĩ là nếu post chung thế này mai mốt cái hàm nào nó có lỗi rồi mọi ng hỏi nhốn nháo lên thì cái topic này dài loằng ngoằng như rắn bò vậy! với lại một hàm thì dễ hiểu mà còn dễ góp ý nữa chứ

1 Like

quá hay luôn
cảm ơn bác nhiều

kiểu wchar_t có hỗ trợ hàm cắt xâu ko mọi người

hoangtuan2106:

hàm cắt xâu

Hàm này tên là gì trong C?

Có dòng char *s;
Vậy dấu * đằng sau s để làm gì ?

1 Like

next page →

Home Categories FAQ/Guidelines Terms of Service Privacy Policy

Video liên quan

Chủ Đề